设计模式(C++版)之(proxy)代理模式
结构性模式--代理(proxy)模式
一,proxy原理解析:
代理模式:为一个对象提供一种代理机制,用这个代理来控制对这个对象的访问。
有四种常用的情况:
①远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实(例如WEBSERVICES)
②虚拟代理,是根据需要创建开销很大的对象。如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。(例如网页中的图片,通过虚拟代理来替代真实的图片,此时代理存储真实图片的路径和尺寸)。
③安全代理,用来控制真实对象访问时的权限
④智能指引,指当调用真实对象时,代理处理另外一些事。
实现要点:
①抽象基类:Subject:定义了Proxy和RealSubject的公有接口。
②两个子类RealSubject类和Proxy类都继承自Subject,这样保证了两个的接口都是一致的。
③Proxy类和RealSuject类关联,Proxy类要保存RealSuject类的一个引用或者指针,以便对实体进行访问。
如图:Client不跟RealSubject交互,而是由Proxy控制对RealSubject的访问。
二,c++代码实现:
#include <iostream>
using namespace std;
//
class CSubject
{
public:
CSubject() {}
~CSubject() {}
void virtual request() {};//interface
};
//
class CrealSubject: public CSubject
{
public:
CrealSubject():CSubject() {}
~CrealSubject() {}
void request()
{
cout<<"CrealSubject request..."<<endl;
}
};
//
class CProxy: public CSubject
{
public:
CProxy():CSubject(), rb(0) {}
~CProxy() {delete rb;}
void request()
{
if(rb == NULL)
{
rb = new CrealSubject();
}
//
rb->request();
}
private:
CrealSubject* rb;
};
//
int main()
{
CSubject *sp = new CProxy();
sp->request();
delete sp;
return 0;
}
注:推荐可以参考:http://blog.csdn.net/wuzhekai1985/article/details/6669219
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。