设计模式之代理模式
2015-08-05 20:54
525 查看
介绍
为其它对象提供一种代理以控制对这个对象的访问, 如只有当真的要访问这个对象的时候才进行创建并初始化, 在者之前可以利用该对象的代理, 这样就省去了创建和初始化的消耗;适用性
远程代理Remote Proxy, 为对象在不同的地址空间提供局部代表;虚代理Virtual Proxy, 即为对象的使用这占时提供一个虚拟的对象, 只当正在需求的时候才初始化对象;
保护代理Protection Proxy, 控制对原始对象的权限访问;
智能引用Smart Reference;
例子
小明与小梦打算买房, 为了方便他们委托一家中介帮忙寻找房源, 中介会去房地产公司一买房的名义去看房, 只有等房子真正被小明确认后才会把钱给房地产方;代码
[code]// 抽象买家 class Buyer { public: virtual void LookForHouse() = 0; virtual void Negotiate() = 0; virtual void PayMoney() = 0; }; // 真正买家 class RealBuyer : public Buyer { public: RealBuyer(string str):buyername(str){}; virtual void LookForHouse() { cout<<buyername<<" wants to buy a house"<<endl; } virtual void Negotiate() { cout<<buyername<<" the requirement"<<endl; } virtual void PayMoney() { cout<<buyername<<" payed $10000000 for buying the house"<<endl; } private: string buyername; }; // proxy class BuyProxy : public Buyer { public: BuyProxy(Buyer* b):mBuyer(b){}; virtual void LookForHouse() { if(mBuyer) mBuyer->LookForHouse(); } virtual void Negotiate() { if(mBuyer) mBuyer->Negotiate(); } virtual void PayMoney() { if(mBuyer) mBuyer->PayMoney(); } Buyer* GetBuyer(){return mBuyer;} private: Buyer* mBuyer; }; int main() { Buyer* HouseLooker = new BuyProxy(new RealBuyer("xiaoming")); HouseLooker->LookForHouse(); HouseLooker->Negotiate(); HouseLooker->PayMoney(); return 0; }
占时是怎么理解, 但不应该这么简单?
相关文章推荐
- 命名空间作用域
- POJ-2488 A Knight's Journey
- 第十一章数据操作与事物控制
- DNS基本概念和相关工具入门
- STM32之NVIC个人理解
- 协方差矩阵
- NodeJs简介
- TypeError:can't use a string pattern on bytes-like object
- poj 3267 The Cow Lexicon dp
- Chrome“无法添加来自此网站的应用”的解决办法
- autoresizingMask属性
- 2013 ACM/ICPC 杭州邀请赛(8.5)
- 第九章高级子查询
- 无法启动mysql服务 错误1067:进程意外中止
- 第19/24周 锁升级(Lock Escalations)
- Hibernate学习笔记(一) — hibernate的配置文件简介与执行原理
- 晶振不起振的一种原因
- nyoj 71 独木舟上的旅行【贪心】
- java之yield(),sleep(),wait()区别详解-备忘笔记
- UIPickerView的简单应用——省份/城市选择的实现