1、意图
为其他对象提供一种代理以控制对这个访问
2、适用性
在以下情况下使用Proxy模式
(1)远程代理为一个对象在不同的地址空间提供局部代表。
(2)虚代理根据需要创建开销很大的对象。
(3)保护代理控制对原始对象的访问。
(4)智能指引取代了简单的指针,它在访问对象时执行一些附加操作。
3、参与者
(1)Proxy:保存一个引用使得代理可以访问实体;提供一个与 Subject的接口相同的接口,这样代理就可以用来替代实体;控制对实体的存取,并可以负责创建和删除它;其它功能依赖于代理的类型
(2)Subject:定义RealSubject和Proxy的共用接口,这样在任何使用RealSubject的地方都可以使用Proxy
(3)RealSubject:定义Proxy代表的实体
4、协作
代理根据其种类,在适当的时候向RealSubject转发请求
5、效果
Proxy模式在访问对象时引入了一定程度的间接性,根据代理的类型,附加的间接性有多种用途:
(1)Remote Proxy可以隐藏一个对象存在于不同地址空间的事实
(2)Virtual Proxy可以进行最优化
(3)Protection Proxies 和Smart Reference都允许在访问一个对象时有一些附加的内务处理
6、相关模式
Adapter:适配器Adapter为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实例会执行的操作,因此,它的接口实际上可能只是实例接口的一个子集
Decorator:尽管decorator的实现部分与代理相似,但decorator的目的不一样。decorator为对象添加一个或多个功能,而代理则控制对对象的访问