[大话设计模式] 第7章: 代理模式
2017-08-16 17:08
288 查看
代理模式(Proxy)
代理模式:为其他对象提供一种代理以控制对这个对象的访问。实际上是在访问对象时引入一定程度的间接性。远程代理:为一个对象在不同地址空间提供局部代表,隐藏一个对象存在于不同空间的事实。如.Net加入Web引用,引入WebService,此时项目会生成WebReference的文件夹,就是代理。
虚拟代理:根据需要创建开销很大的对象,通过它存放实例化需很长时间的真实对象。HTML中的多图,就是通过虚拟代理代替了真实图片,存储路径和尺寸。
安全代理:控制真实对象的访问权限,用于对象应该拥有不同的访问权限时。
智能指引:当调用真实对象时,代理处理一些另外的事情。通过代理在访问对象时增加一些内务处理。
UML类图
实例分析
场景描述: 某追求者(Pursuit类)追求女同学(SchoolGirl类), 但是由于不在一个班不能直接给女同学送礼物, 需要一个代理(Proxy类)帮忙送礼物.UML类图
代码实现
#include <iostream> #include <string> using namespace std; // 被追求者类 class SchoolGirl { public: SchoolGirl() {} SchoolGirl(string n) : name(n){} string get_name(){ return name; } private: string name; }; // 代理与追求者公共接口 class IGiveGift { public: virtual void give_dolls() = 0; virtual void give_flowers() = 0; virtual void give_chocolate() = 0; }; // 追求者类 class Pursuit : public IGiveGift { public: Pursuit(SchoolGirl *sg) : mm(sg){ } void give_dolls(); void give_flowers(); void give_chocolate(); private: SchoolGirl *mm; }; void Pursuit::give_dolls() { cout << "Give dolls to " << mm->get_name() << endl; } void Pursuit::give_flowers() { cout << "Give flowers to " << mm->get_name() << endl; } void Pursuit::give_chocolate() { cout << "Give chocolate to " << mm->get_name() << endl; } // 代理类 class Proxy : public IGiveGift { public: Proxy(SchoolGirl *mm); ~Proxy(); void give_dolls(); void give_flowers(); void give_chocolate(); private: Pursuit *gg; }; Proxy::Proxy(SchoolGirl *mm) { gg = new Pursuit(mm); } Proxy::~Proxy() { delete gg; } void Proxy::give_dolls() { gg->give_dolls(); } void Proxy::give_flowers() { gg->give_flowers(); } void Proxy::give_chocolate() { gg->give_chocolate(); } // 客户端 int main() { SchoolGirl s_girl("娇娇"); Proxy daili(&s_girl); daili.give_flowers(); daili.give_dolls(); daili.give_chocolate(); return 0; } /* 输出 Give flowers to 娇娇 Give dolls to 娇娇 Give chocolate to 娇娇 */
相关文章推荐
- 《大话设计模式》之--第7章 为别人做嫁衣----代理模式
- 《大话设计模式》代码JAVA版-第7章 代理模式
- 大话设计模式C++实现-第7章-代理模式
- 《大话设计模式》之--第7章 为别人做嫁衣----代理模式
- 大话设计模式C++实现-第7章-代理模式
- 第7章 为别人做嫁衣----代理模式 大话设计模式
- 《大话设计模式》读书笔记:代理模式与Java的Proxy动态代理
- 大话设计模式C++实现-文章7章-代理模式
- 八、结构型模式之适配器、桥接、代理-----《大话设计模式》
- Java程序员从笨鸟到菜鸟之(三十九)大话设计模式(七)代理模式和java动态代理机制
- 大话设计模式,让你的代码更完美3---代理模式
- 大话设计模式--代理模式 proxy
- 四、大话设计模式 之 代理模式
- 《大话设计模式》读书笔记(C++代码实现) 第七章:代理模式
- 大话设计模式-Chapter7 代理模式
- 读《大话设计模式》---代理模式(proxy)
- 大话设计模式--代理模式 proxy
- 大话设计模式之代理模式
- 大话设计模式(三)动态代理设计模式