定义
为其他对象提供一种代理以控制这个对象的访问
代理模式中的角色
1:抽象主题角色(Subject)
该角色是真是主题和代理主题的共同接口,以便在任何地方都能够使用代理主题
public interface Subject{ //定义一个请求方法 public void request();}
2:代理主题角色(ProxySubject)
该角色负责控制对真是主题的引用,负责在需要的时候创建或者删除真是主题对象,并且在真是主题角色处理完毕前后做预先和善后的处理
public class ProxySubject implements Subject{ private Subject subject; public ProxySubject (Subject subject){ this.subject = subject(); } @override public void request(){ this.beforeRequest(); subject.request(); this.afterReqest(); } private void beforeRequest(){ //预先处理 System.out.println("this is do before……") } private void afterRequest(){ //善后处理 System.out.println("this is do after……") } }
3:真是主题角色(RealSubject)
该角色也叫被委托角色,是业务逻辑的具体执行者
public class RealSubject implements Subject{ @override public void request(){ System.out.println(" i am real request method……") }}
调用示例
public class ProxyTest{ public static void main(String [] args){ ProxySubject subject = new ProxySubject(new RealSubject()); subject.request(); }}
优点
1:职责清晰,真实角色不用负责本职工作之外的事情
2:高扩展性,只要实现了接口,代理类不用任何修改就可以代理任何真实角色
3:智能化,代理类在运行的时候才确定需要代理的真实主题
使用场景
经典应用场景就是Spring的AOP,就是代理模式,还有一些事务处理方面
代理模式分类
(按照使用目的划分)
1:远程代理(Remote):为一个位于不同地址空间的对象提供一个局部代表对象
2:虚拟代理(Virtual):需要创建消耗资源过多的对象的时候,可以先创建代理对象,延缓真实对象的创建
3:保护代理(Protect Or Access):控制一个对象的访问
4:缓存代理(Cache):提供临时的存储空间,便于多个客户端共享这个对象
5:同步代理(Synchronization):使几个对象能够同时使用一个对象并且没有冲突
6:智能引用(Smart Reference):当一个对象被访问的时候提供额外的操作,比如记录流量和访问次数
参考资料:设计模式之禅(二)
文章转载于:https://www.jianshu.com/p/f9e0c33433a9
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~