代理模式(proxy)c++版本
来源:互联网 发布:bear煮粥煲汤淘宝 编辑:程序博客网 时间:2024/05/16 08:27
这是大话设计模式中的代理模式的c++版本
/* * proxy.cpp * * Created on: Jul 20, 2017 * Author: clh01s@163.com * 代理模式 */#include <iostream>#include <string>using namespace std;class Girl{public: Girl(string name) { _name = name; } string _name;};//送礼物接口class GiveGift{public: virtual ~GiveGift(){}; virtual void GiveDolls()=0; virtual void GiveFlowers()=0; virtual void GiveChocolate()=0;};class Pursuit:public GiveGift{public: Pursuit(Girl *name) { _name = name; } void GiveDolls() override { cout<<_name->_name<<"这是送你的洋娃娃"<<endl; } void GiveFlowers() override { cout<<_name->_name<<"这是送你的鲜花"<<endl; } void GiveChocolate() override { cout<<_name->_name<<"这是送你的巧克力"<<endl; }private: Girl *_name;};//代理类,真正执行送礼物的操作class Proxy:public GiveGift{public: //带参构造函数接受女孩的类的地址(类似获得女孩的地址) Proxy(Girl *name) { man = new Pursuit(name); } void GiveDolls() override { man->GiveDolls(); } void GiveFlowers() override { man->GiveFlowers(); } void GiveChocolate() override { man->GiveChocolate(); }private: //通过指针来调用相关函数 Pursuit *man;};int main(){ Girl *lucy = new Girl("lucy"); Proxy *transport_man = new Proxy(lucy); transport_man->GiveDolls(); transport_man->GiveFlowers(); transport_man->GiveChocolate(); delete lucy; delete transport_man; return 0;}
代理模式的优点(摘录自《设计模式》):
1.Proxy模式在访问对象时引入了一定程度的间接性.根据代理的类型,附加的间接性有多种用途:
1)remote proxy 可以隐藏一个对象存在于不同地址空间的事实
2)virtual proxy 可以进行最优化,例如根据要求创建对象
3)protection proxies和smart reference 都允许在访问一个对象时有一些附加的内务处理
2.proxy模式还可以对用户隐藏另一种称之为copy-on-write的优化方式,该优化与根据需要创建对象有关.在拷贝一个庞大而复杂的对象是一种开销很大的操作,如果这个拷贝根本没有头被修改,那么这些开销就必要.用代理延迟这一拷贝过程,我们可以保证只有当这个对象被修改的时候才对他进行拷贝.
转载请注明源地址:http://blog.csdn.net/clh01s/article/details/75556346
阅读全文
0 0
- 代理模式(proxy)c++版本
- Proxy模式 代理模式
- 代理模式:Proxy模式
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
- 代理(Proxy)模式
- 代理模式Proxy Design
- 代理(Proxy)模式
- 代理(Proxy)模式
- 代理模式(Proxy Pattern)
- 代理(Proxy)模式
- 代理模式(Proxy Pattern)
- proxy(代理)模式
- Proxy Pattern (代理模式)
- Proxy pattern 代理模式
- 代理模式(Proxy)
- java 代理(proxy)模式
- Proxy 代理模式
- 代理模式(Proxy)
- [笔记]python爬虫:正则表达式库re
- Mysql搜索不为空的数据时
- CouponView自定义优惠卷布局
- 怎么将java工程转变为web工程
- App渠道统计技术选型参考:openinstall的App安装量统计的优势在哪里
- 代理模式(proxy)c++版本
- java creeper
- uCOS-II中的任务切换-图解多种任务调度时机与问题——转自apollius@格子间
- nginx反向代理服务器安装、基本配置
- linux系统挂掉排查 3板斧
- Oracle 解决【ORA-01704:字符串文字太长】
- 与花有关的古诗词【用逐浪字体设计就是这么美!】
- JavaIO操作3
- [转]非常通俗易懂的Spring IOC原理