跟着《重构》学设计模式——代理模式
为其他对象提供一种代理以控制这个对象的访问。
PROXY代理模式讲解
模式类型
对象结构型模式
意图
为其他对象提供一种代理以控制这个对象的访问。
动机
对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。(比如原对象的创建开销大)
适用场景
在需要用比较通用和复杂的对象指针代替简单的指针的时候,用Proxy模式。
- 远程代理
- 虚代理:根据需要创建开销很大的对象
- 保护代理:用于对象应该有不同的访问权限的时候。
- 智能指引:在访问对象时执行一些附加操作,如
- 对指向实际对象的引用计数;
- 当第一次引用一个持久对象时,将它装入内存;
- 在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。
UML图
书籍总结
在《Gof》以及《Head First设计模式》中,描述是一致的,而在《设计模式之禅》中,其讲述的例子是王婆做潘金莲的代理从而做自己做不到的事情,则和代理的目的动机牛马不相及了。在书籍《图解设计模式》中,解释是“当不一定需要本人亲自进行工作时,就可以寻找代理人去完成工作”,也曲解了代理模式的初衷。