代理模式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
- C语言实现《设计模式之禅》之代理模式——普通代理
- 【C++】Chapter4:代理模式
- Objective C--代理模式
- Objective C 代理模式
- Objective-c 代理模式
- Object-C代理模式
- [c++]代理对象模式
- [c++]代理对象模式
- 代理模式C++实现
- 静态代理模式实现
- 代理模式c++实现
- C++实现代理模式
- 代理模式 C++ 实现
- 代理模式lua实现
- 代理模式----C++实现
- 代理模式C++实现
- C#实现代理模式
- Java实现代理模式
- sqort(-10)
- 七种常见排序
- Android调试工具之ADB
- 获取优酷网、土豆网、56网的视频缩略图
- 稳定排序和不稳定排序
- 代理模式C++实现
- Java+PHP整合=混血新宠儿
- eclipse从数据库逆向生成Hibernate实体类
- 主机window7 64位 虚拟机下安装Ubuntu系统如何实现网络共享ixi
- Goroutine的底部到底对应多少线程呢?
- Eclipse使用hibernate插件
- 模拟-Finding crosses hdu4414 c++
- cin 后的getline
- C#类型推断(type interface)使用var关键字。