代理模式
模式动机
- 通过引入一个新的对象来实现对真实对象的操作,或者将新的对象作为真实对象的一个替身。
- 引入代理对象来间接访问一个对象。
模式定义
- 给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
- 对象结构型模式。
- 代理对象可以在客户端和目标对象之间起到中介的作用。
- 通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外的新的服务。
代理模式结构图
应用实例
在一个论坛中已注册用户和游客的权限不同,已注册的用户拥有发帖、修改个人信息、修改帖子等功能;而游客只有看帖的功能。
静态代理实现
接口
1 | public interface Operate { |
用户类
1 | public class User implements Operate{ |
代理类
1 | public class UserProxy implements Operate{ |
客户端测试
1 | public class Client { |
输出结果
动态代理实现
修改一下需求:要求操作后需要记录日志。
接口
同静态代理
用户类
同静态代理
记录日志类
1 | public class Log { |
动态代理中介
1 | /** |
客户端测试
1 | public class Client { |