您的位置:首页 > 编程语言 > C语言/C++

设计模式(C++版)之(proxy)代理模式

2014-02-17 10:49 197 查看
结构性模式--代理(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: