纵有疾风起
人生不言弃

设计模式六–代理模式

定义

为其他对象提供一种代理以控制这个对象的访问

代理模式中的角色

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

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 设计模式六–代理模式
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录