经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
结构型模式之代理模式
来源:cnblogs  作者:yewen1234  时间:2018/12/12 9:49:55  对本文有异议

 代理模式(Proxy Pattern)也叫委托模式,是一个使用率非常高的模式。

定义:

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

代理模式是一项基本的设计技巧,许多其他的模式,如状态模式、策略模式、访问者模式本质上也采用了代理模式。类图如下所示。

代理模式提供以下3个角色。

  • 抽象主题(Subject)角色:是真实主题和代理主题的共同接口,以便在任何可以使用真实主题的地方都可以使用代理主题。
  • 代理主题(Proxy Subject)角色:也叫委托类、代理类,该角色负责控制对真实主题的引用,负责在需要的时候创建或删除真实主题对象,并且在真实主题角色处理完毕前后做预处理和善后处理工作。
  • 真实主题(Real Subject)角色:该角色也叫做委托角色、被代理角色,是业务逻辑的具体执行者。

Subject.java

  1. public interface Subject {
  2. // 定义一个请求方法
  3. public void request();
  4. }

RealSubject.java模式

  1. public class RealSubject implements Subject {
  2. @Override
  3. public void request() {
  4. // 业务逻辑处理
  5. }
  6. }

ProxySubject.java

  1. public class ProxySubject implements Subject {
  2. private Subject subject;
  3. public ProxySubject(Subject subject) {
  4. this.subject = subject;
  5. }
  6. @Override
  7. public void request() {
  8. this.beforeRequest();
  9. this.subject.request();
  10. this.afterRequest();
  11. }
  12. // 请求前的操作
  13. private void beforeRequest() {
  14. // 预处理
  15. }
  16. // 请求后的操作
  17. private void afterRequest() {
  18. // 善后处理
  19. }
  20. }

一个代理主题类可以代理多个真实主题,具体代理哪个真实主题是由高层的应用模块决定的,可以通过代理类的构造函数传递被代理者。

代理模式的各类

  • 远程(Remote)代理:为一个位于不同地址空间的对象提供一个局部代表对象。这个不同的地址空间可以是在本机器中,也可以在另一台机器上。
  • 虚拟(Virtual)代理:有时需要创建一些消耗较多资源的对象,可以首先创建代理对象,而将真实对象的创建延迟。例如,加载一个很大的图片,可以通过图片的代理来替代真正的图片。
  • 保护(Protect or Access)代理:控制一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。
  • 缓存(Cache)代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
  • 同步(Synchronization)代理:使几个用户能够同时使用一个对象而没有冲突。
  • 智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,例如,记录访问的流量和次数等。

注意:在所有各类的代理模式中,虚拟代理、远程代理、智能引用代理和保护代理是最为常见的代理模式。

优点:

  • 职责清晰:真实的角色实现实际的业务逻辑,不用关心其他非本职的事务,通过附加的代理完成附加的事务,附加的结果就是编程简洁清晰。
  • 高扩展性:具体主题角色随需求不同可能有很多种,但只要实现了接口,代理类就完全可以在不做任何修改的情况下代理各种真实主题角色。
  • 智能化:代理类可以在运行时才确定要去代理的真实主题,这是一个强大的功能。

应用场景:

  • 代理模式应用非常广泛,大到一个系统框架、企业平台,小到事务处理、代码片段,随处可见代理模式的使用,例如,Java RMI的远程调用就是一种代理模式的应用,现在流行的AOP也可以通过代理模式实现。

摘自:

青岛东合信息技术有限公司 . 设计模式(Java版) .  电子工业出版社,2012,73-76.

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号