设计模式(三)--代理模式

来源:互联网 发布:知乎 便携水杯 编辑:程序博客网 时间:2024/04/25 07:43

一、定义

代理模式,为其它对象提供一种代理以控制对这个对象的访问。

二、结构图

这里写图片描述

三、例子

1)Subject类,定义了RealSubject和Proxy的共用接口,这样在任何使用RealSubject的地方都可以使用Proxy。class Subject{protected:    void Request();}(2)RealSubject类,定义Proxy所代表的真实实体。class RealSubject : Subject{public:    void Request    {        cout<<"Real Request";    }}(3)Proxy类,保存一个引用使得代理可以访问实体,并提供一个与subject的接口相同的接口,这样代理就可以用来代替实体。class Proxy : Subject{public:    RealSubject realSubject;    void Request()    {        if(realSubject == NULL)        {            realSubject = new RealSubject();        }        realSubject.Request();    }}(4)客户端调用void main(){    Proxy proxy = new Proxy();    proxy.Request();}

四、适用场景

(1) 远程代理,为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
(2) 虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
(3) 安全代理。用来控制真实对象访问时的权限。
(4) 智能指引。当调用真实的对象时,代理处理另外一些事。

五、特点

需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作

六、对比

(1)适配器模式
适配器Adapter为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,因此,它的接口实际上可能只是实体接口的一个子集。
(2)装饰器模式
尽管Decorator的实现部分与代理相似,但Decorator的目的不一样。Decorator为对象添加一个或多个功能,而代理则控制对对象的访问。

————————————————————————————————————
参考资料:
1.我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)【http://blog.csdn.net/lcl_data/article/details/8989420】
2.《大话设计模式》
3.设计模式大杂烩(24种设计模式的总结以及学习设计模式的几点建议)http://www.cnblogs.com/zuoxiaolong/p/pattern26.html

1 0
原创粉丝点击