定义
为其他对象提供一个代理或地方以控制对这个对象的访问。当客户向proxy对象第一次提出请求时,proxy实例化真实的对象,并且将请求传给它,以后所有的客户请求都经由proxy传给封装了的真实对象。
proxy模式分为4种,用得最多的是远程和虚拟代理模式:
1. Virtual Proxy(虚拟代理):Proxy不会生成一个真实的耗费代理,直到非常必要时(首次有请求)。它用来存放花费大(实例需要很长时间)的真实对象。
2. Remote Proxy(远程代理):本地的代理对象控制一个远程的对象。
3. Protection Proxy(安全代理):代理检查调用真实对象所需要的权限。
4. Smart Reference(聪明引用):当调用真实的对象时,代理处理另外一些事。
(1). 计算真实对象的引用次数,在没有引用时自动释放。
(2). 首次被引用时装载存留(保存在硬盘或内存、数据库等)的对象。
(3). 在访问时检查真实对象是否锁定,确保没有其他对象会改变它。
UML类图如下:
其中的类和对象的关系为:
1. Proxy(代理):维护一个引用使得代理可以访问实体,如果RealSubject和Subject的接口相同,Proxy会引用Subject;提供一个与Subject的接口相同的接口,使得代理可以用来代替实体。有点想Adapter模式;控制对实体的访问并且负责创建及删除它;其他功能取决于Proxy的类型。
* 远程代理:负责对请求及其参数进行编码,向不同的地址空间中的实体发送已编码的请求。
* 虚拟代理:可以缓存实体的其他信息,以便延迟对它的访问。
* 保护代理:检查调用者的请求是不是有所必需的权限。
2. Subject(抽象实体接口):为RealSubject实体及Proxy代理定义相同的接口,使得RealSubject在任何地方都可以使用Proxy来访问。
3. RealSubject(实体):定义Proxy代理的实体。
典型应用的顺序图如下:
实例1——数学代理
下面的例子就是应用远程代理来访问另外一个应用程序域中的对象。
UML类图如下:
|