您的位置:首页 > 其它

【设计模式基础】结构型模式 - 7 - 代理(Proxy)

2013-12-18 23:47 543 查看

1. 模式意图

代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

在一些情况下,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。

按照使用目的来划分,代理有以下几种:

远程代理(Remote Proxy): 为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中。
虚拟代理(Virtual Proxy): 根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。
Copy-on-Write代理: 虚拟代理的一种,把复制(克隆)拖延到只有在客户端需要时,才真正采取行动。
保护代理(Protection Proxy): 控制对一个对象的访问,如果需要,可以给不同的用户提供不同级别的使用权限。
Cache代理: 为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
防火墙(Firewall)代理: 保护目标,不让恶意用户接近。
同步化(Synchronization)代理: 使几个用户能够同时使用一个对象而没有冲突。
智能引用(Smart Reference)代理: 当一个对象被引用时,提供一些额外的操作,比如将此对象调用的次数记录下来等。

虚拟代理、远程代理、智能引用代理和保护代理是最为常见的代理模式。

2. 模式定义



Subject: 声明Proxy和RealSubject的共同接口,这样就在任何使用RealSubject的地方都可以使用Proxy;

RealSubject:定义了Proxy所代表的实体;

Proxy: 保存一个引用使得代理可以访问实体;Proxy和RealSubject有相同的接口,这样代理就可以用来代替实体;控制对实体的存取,并可能负责创建和删除它;Proxy通常在将客户端调用传递给RealSubject之前或之后,都要执行某个操作,而不是单纯的将调用传递给RealSubject;

3. 模式实现

4. 模式应用

4.1 远程代理:客户端与webservice使用

4.2 C++智能指针

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: