结构型对象模式-代理模式

代理模式(Proxy Desing Patterns)

代理模式的英文叫做Proxy或Surrogate,也称作委托模式。目的为其他对象提供一种代理以控制对这个对象的创建以及访问。

代理模式的分类-学院派分类

远程代理(Remote Proxy)
为一个对象在不同的地址空间提供局部代表,这种代理也称为“大使”(Ambassador)。

虚代理(Virtual Proxy)
根据需要创建开销很大的对象。

保护代理(Protection Proxy)
控制对原始对象的访问,用于对象应该有不同的访问权限的时候。

智能指引(Smart Reference) 取代了简单的指针,它在访问对象时执行一些附加操作。 它的典型用途包括: - 对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放它(也称为Smart Pointers, Smart Reference)。 - 写时拷贝(Copy-on-Write)当第一次引用一个持久对象时,将它装入内存。 - 同步化(Synchronization)代理在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。 - Cache Proxy代理为某一个目标操作的结果提供临时的储存空间以便多个客户端可以共享这些结果。

代理模式的分类-个人分类

对于一个对象的创建以及访问的控制可能会有以下需要:

控制创建:
何时创建:使用时创建
如何创建:使用已有的对象通过复制创建(写时拷贝)
创建在哪里:创建在一个临时存储空间内便于多个客户端访问

控制访问:
可被访问的接口:根据访问者身份控制对象接口权限,以及返回结果
访问的时机:访问实际对象接口前由代理进行同步,确定是否可访问

控制通讯:
对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求如中间人

控制创建-创建时机

1.控制对象的构造以及析构
(1) 代理者封装实体指针,使客户端无需考虑实体对象的释放

2.开销很大的对象在需要时创建实体(虚代理)
(1) 特定时刻创建

(2) 重载存取运算符即成员访问操作符:解引用操作符"*"以及箭头操作符"->"(虚代理)

(3) 虚代理auto_ptr

控制创建-创建方式 ###

(1) 使用已有的对象,通过复制创建实体,即:写时拷贝(Copy-on-Write, COW),一种复制创造对象时延迟甚至免除拷贝的对象创造方式,优点是大幅降低拷贝庞大实体的开销,使用的手段是引用计数。貌似COW机制把引用存储在共享数据区里比较好用。

(2) 虚代理smart_ptr

控制创建-存储方式

(1) 通过代理类将实体对象创建在一个公共存储区内(Cache Proxy)

控制访问-权限控制

(1) 通过代理类控制权限,针对不同身份的客户端提供相应的接口(Protection Proxy)

控制访问-时机控制

(1) 代理类内部实现同步机制,控制对实体的访问时机(Synchronization)

控制通讯

(1) 通过代理类,拦截实体与客户端之间的通讯,并对通讯信息重新编码,例如中间人。(Remote Proxy)