对象结构型——代理模式(Proxy)
2012-05-30 19:03
453 查看
意图:
为其他对象提供一种代理以控制对这个对象的访问
UML图:
解析:
某个对象知道它真正被使用的时候才被初始化,在没有用到的时候就暂时用Proxy作为占位符,
适用:
在需要用比较通用和复杂的对象指针代替简单的指针的时候,适用Proxy模式,如:
远程代理,为一个对象在不同的地址空间提供局部代表,
虚代理,根据需要创建开销很大的对象
保护代理,控制对原始对象的访问,保护代理用于对象应该有不同的访问权限
智能指针取代了简单的指针,它在访问对象时执行一些附加操作
对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放
当第一次引用一个持久对象时,将他装入内存
在访问一个实际对象钱,检查是否已经锁定了它,以确保其他对象不能改变它
为其他对象提供一种代理以控制对这个对象的访问
UML图:
解析:
某个对象知道它真正被使用的时候才被初始化,在没有用到的时候就暂时用Proxy作为占位符,
适用:
在需要用比较通用和复杂的对象指针代替简单的指针的时候,适用Proxy模式,如:
远程代理,为一个对象在不同的地址空间提供局部代表,
虚代理,根据需要创建开销很大的对象
保护代理,控制对原始对象的访问,保护代理用于对象应该有不同的访问权限
智能指针取代了简单的指针,它在访问对象时执行一些附加操作
对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放
当第一次引用一个持久对象时,将他装入内存
在访问一个实际对象钱,检查是否已经锁定了它,以确保其他对象不能改变它
#include <iostream> using namespace std; class Subject { public: Subject(){} virtual void Request()=0; }; class RealSubject:public Subject { public: RealSubject(){} void Request () { cout<<"RealSubject-Request-------------------------------"<<endl; } }; class Proxy:public Subject { public: Proxy():rs(NULL) { cout<<"Construction of Proxy for RealSubject"<<endl; } virtual ~Proxy() { delete rs; rs=NULL; } void Request() { if(NULL==rs) { cout<<"Create a new RealSubject and Reaquest"<<endl; rs=new RealSubject(); } else { cout<<"The RealSubject has been created"<<endl; } rs->Request(); } private: RealSubject* rs; }; int main() { Subject *pProxy=new Proxy(); pProxy->Request(); pProxy->Request(); delete pProxy; return 0; }
相关文章推荐
- 代理模式(Proxy)-对象结构型模式
- 2.7 Proxy(代理) -- 对象结构型模式
- 设计模式之十二:Proxy(代理)—对象结构型模式
- 设计模式之代理(Proxy)----对象结构型模式
- Proxy(代理)-对象结构型模式
- Proxy(代理)-对象结构型模式
- 设计模式十三:proxy(代理)——对象结构型模式
- Java经典设计模式-结构型模式-代理模式(Proxy)
- 代理模式 -- Proxy -- 结构型模式
- spring框架Proxy-代理模式(动态生成代理对象)
- Java设计模式之结构型模式-代理模式(Proxy)
- 代理模式(Proxy Pattern、Surrogate Pattern 对象结构型模式)
- 设计模式(12)--Proxy(代理模式)--结构型
- 设计模式(十一)代理模式Proxy(结构型)
- 二十二、代理模式Proxy 第一部分(结构型模式)
- 设计模式(十一)代理模式Proxy(结构型)
- PHP设计模式:结构型之代理(Proxy)
- 结构型模式-Proxy ( 代理模式 )
- [设计模式-结构型]代理模式(Proxy)
- C#面向对象设计模式纵横谈 学习笔记13 Proxy代理模式(结构型模式)