代理模式的共同优点如下:

(1) 能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。

(2) 客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。

此外,不同类型的代理模式也具有独特的优点,例如:

(1) 远程代理为位于两个不同地址空间对象的访问提供了一种实现机制,可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高系统的整体运行效率。

(2) 虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销。

(3) 缓冲代理为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能,缩短执行时间。

(4) 保护代理可以控制对一个对象的访问权限,为不同用户提供不同级别的使用权限。

15.7.2 模式缺点
       代理模式的主要缺点如下:

(1) 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,例如保护代理。

(2) 实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂,例如远程代理。

15.7.3 模式适用场景
       代理模式的类型较多,不同类型的代理模式有不同的优缺点,它们应用于不同的场合:

(1) 当客户端对象需要访问远程主机中的对象时可以使用远程代理。

(2) 当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理,例如一个对象需要很长时间才能完成加载时。

(3) 当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理。通过使用缓冲代理,系统无须在客户端每一次访问时都重新执行操作,只需直接从临时缓冲区获取操作结果即可。

(4) 当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理。

(5) 当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理。

3个角色

(1) Subject(抽象主题角色):它声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题,客户端通常需要针对抽象主题角色进行编程。

(2) Proxy(代理主题角色):它包含了对真实主题的引用,从而可以在任何时候操作真实主题对象;在代理主题角色中提供一个与真实主题角色相同的接口,以便在任何时候都可以替代真实主题;代理主题角色还可以控制对真实主题的使用,负责在需要的时候创建和删除真实主题对象,并对真实主题对象的使用加以约束。通常,在代理主题角色中,客户端在调用所引用的真实主题操作之前或之后还需要执行其他操作,而不仅仅是单纯调用真实主题对象中的操作。

(3) RealSubject(真实主题角色):它定义了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作,客户端可以通过代理主题角色间接调用真实主题角色中定义的操作。
---------------------
作者:Liuwei-Sunny
来源:CSDN
原文:https://blog.csdn.net/lovelion/article/details/8227953
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. this关键字
  2. Asp.net EasyUI中的combogrid实现分页功能
  3. 【Android测试】【随笔】模拟双指点击
  4. js打印的两种方法
  5. (转)JAVA 调用Web Service的三种方法
  6. centOS7-配置网络地址
  7. Python基于共现提取《釜山行》人物关系
  8. vuex在项目中使用的一点总结
  9. C#设计模式(0)-设计模式系列文章导航
  10. shell中的数据生命周期scope
  11. python正则表达式获取代理IP网站上的IP地址
  12. 微信小程序生命周期——小程序的生命周期及页面的生命周期。
  13. Huffman 编码压缩算法
  14. 给sharepoint某列表项单独赋予权限
  15. C语言 for循环之阶乘的算法
  16. ArcGIS for JavaScript 关于路径开发的一些记录(二)
  17. Java动态代理学习
  18. D3 数据可视化实战 笔记
  19. RedisClient的安装及基本使用
  20. 【LeetCode】97. Interleaving String

热门文章

  1. Docker技术综述
  2. HTML5触摸事件(touchstart、touchmove和touchend)
  3. Python 依赖关系
  4. 2--Jmeter 4.0--Excel 数据驱动 接口测试
  5. 【MySQL】5.6.x InnoDB Error Table mysql.innodb_table_stats not found
  6. ps使用图层合并切图
  7. SQLI DUMB SERIES-4
  8. 动手动脑-Java的继承与多态
  9. PTA——龟兔赛跑
  10. linux下如何执行.sh文件 【转】