代理模式C++实现

来源:互联网 发布:淘宝自动回复问题大全 编辑:程序博客网 时间:2024/06/04 19:46

代理模式UML图:


Subject:实例和代理的共用接口,使得在任何使用RealSubject的地方都可以使用Proxy;

RealSubject:实例;

Proxy:代理,它与RealSubject为依赖关系

代理模式代码示例:

代理接口类、实例类、代理类及client类定义和实现如下:

proxy.h

#ifndef PROXY_H#define PROXY_H#include <iostream>#include <string>using namespace std;//代理接口class GiveGift{virtual void GiveDolls()=0;virtual void GiveFlowers()=0;virtual void GiveChocolate()=0;};//被追求者类class SchoolGirl{private:string name;public:SchoolGirl(string strname){name = strname;}string getName(){return name;}};class Pusuit:public GiveGift{private:SchoolGirl *mm;public://追求者是真正给女孩送礼物的对象Pusuit(SchoolGirl *mm1):mm(mm1){}void GiveDolls(){cout << "Give " << mm->getName() << " dolls" << endl;}void GiveFlowers(){cout << "Give " << mm->getName() << " flowers" << endl;}void GiveChocolate(){cout << "Give " << mm->getName() << " chocolate" << endl;}};class Proxy:public GiveGift{private:Pusuit *gg;public://追求者通过代理间接给女孩送礼物Proxy(SchoolGirl *mm1){gg=new Pusuit(mm1);}//在代理的实现方法中实际调用的是追求者的相关方法void GiveDolls(){gg->GiveDolls();}void GiveFlowers(){gg->GiveFlowers();}void GiveChocolate(){gg->GiveChocolate();}};#endif
客户端代码如下:

#include "proxy.h"int main(){SchoolGirl *mm = new SchoolGirl("jiaojiao");Proxy *daili = new Proxy(mm);daili->GiveDolls();daili->GiveFlowers();daili->GiveChocolate();return 0;}
代码输出如下:

代理模式的适用场合:

(1)远程代理:为一个对象在不同的地址空间提供局部对象;例:webservice在.net中的应用;

(2)虚拟代理:根据需要创建开销很大的对象,通过它来创建实例化需要很长时间的对象;例:浏览器中优化下载图片;

(3)安全代理:用来控制真是对象访问时的权限;

(4)智能指引:当调用真实的对象时,代理用来处理另外一些事;


总结:代理模式是在访问对象中引入一定程度的间接性,因为这种间接性,可以附加很多用途;

            代理就是真实对象的代表;


0 0
原创粉丝点击