Proxy(代理)---对象结构型模式
为其他对象提供一种代理以控制对这个对象的访问。
对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。
?
1、远程代理(Remote Proxy):为一个对象在不同的地址空间提供局部代表。Remote Proxy负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求。Remote Proxy可以隐藏一个对象存在于不同地址空间的事实。
2、虚代理(Virtual Proxy):根据需要创建开销很大的对象。Virtual Proxy可以缓存实体的附加信息,以便延迟对它的访问。Virtual Proxy可以进行最优化,例如根据要求创建对象。
3、保护代理(Protection Proxy):控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。Protection Proxy检查调用者是否具有实现一个请求所必须的访问权限。Protection Proxy允许在访问一个对象时有一些附加的内务处理。
4、智能指引(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作。Smart Reference 允许在访问一个对象时有一些附加的内务处理。
典型应用包括:
(1)对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放它。
(2)当第一次引用一个持久对象时,将它装入内存。
(3)在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。
?
Adapter模式:适配器Adapter为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,因此,它的接口实际上可能只是实体接口的一个子集。
?
Decorator模式:尽管Decorator的实现部分与代理相似,但Decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问。
?代理的实现与Decorator的实现类似,但是在相似的程度上有所差别。
Protection Proxy的实现可能与Decorator的实现差不多。
Remote Proxy不包含对实体的直接引用,而只是一个间接引用,如“主机ID,主机上的局部地址”。
Virtual Proxy开始的时候使用一个间接引用,例如一个文件名,但最终将获取并使用一个直接引用。
?
?