代理模式

来源:互联网 发布:程序员转行可以做什么? 编辑:程序博客网 时间:2024/06/05 04:33
    当对象难以访问或需要对对象的使用加以控制/限制时,可以为对象设置一个代理,代理来持有该对象的实例。对该对象的访问都经由代理对象来控制,再由代理对象去调用被代理对象的实现。这种方法,被称为代理模式。为了增加客户端对目标对象访问的透明性,目标对象和代理类要实现相同的接口,使客户端对方法的使用没有什么区别。

    代理模式定义:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。


    接单结构通常如下:
    Subject为接口,顶一个了Request方法。RealSubject为实现类,既为即将被代理的对象。他实现了具体的Request方法细节。Proxy为代理类,它也实现了Subject接口,使其在方法级别与RealSubject使用起来无异。代理还持有RealSubject的一个实例。在对代理的方法调用中,调用RealSubject实例的对应方法。
    在实际使用中,有几种常用的相对复杂的代理模式:
  • 远程代理:为一个不太相同地址空间 的对象提供一个本地代理。
  • 虚拟代理:为一个消耗资源较大的对象,提供一个代理,真正使用的时候再创建,实现延迟加载。
  • 保护代理:提供权限控制。
  • 缓冲代理:存储可被客户端共享的临时状态。
  • 智能引用代理:当一个对象行为被调用时,提供一些额外的操作,记录log等。
总结:
    优点:
  • 一定程度上降低了耦合度。
  • 客户端针对抽象编程,增加更换代理,无需修改真正实现。符合开闭原则。
  • 上述的几种代理模式,在实际开发中都带来了各自的好处。
    缺点:
  • 增加代理,带来额外消耗。
  • 增加了额外的工作量和类的数量。
1 0