设计模式(三)--代理模式
来源:互联网 发布:知乎 便携水杯 编辑:程序博客网 时间: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
- 设计模式(三) ----代理模式
- 设计模式(三)--代理模式
- java设计模式--代理模式(三)
- 设计模式三 代理模式
- 三.设计模式-代理模式
- 设计模式<三>代理模式
- 设计模式(三)动态代理
- C#设计模式之代理模式(三)
- 设计模式实践(三)代理模式(Proxy)
- 设计模式学习笔记(三)动态代理模式
- 【三】设计模式——代理模式(Proxy Pattern)
- JAVA设计模式(三)静态与动态代理模式
- PHP设计模式系列(三):代理模式
- C#设计模式之代理模式(三)
- 设计模式之代理模式 (三)
- 设计模式之三静态代理模式
- JAVA设计模式之三:代理模式
- Java/Android设计模式<三> 代理模式
- java自定义注释
- oracle批量update
- iar Error[Li005] no definition for "assert_failed"
- Angularjs 处理CheckBox 处理要传输的数据
- Android7.0启用摄像头拍照
- 设计模式(三)--代理模式
- [笔记]:[字符串]trie数的基本构造
- LineChartView(折线图)的简单使用
- [反射类] -- PHP动态实例化对象并向构造函数传递参数
- ROS下如何用QT打开终端并执行roslaunch
- C++ static
- react-native问题贴
- HDU 2093 (考试排名)
- require is not defined