一、UML图


二、概念

代理模式:为其他对象提供一种代理以控制对这个对象的访问。


三、应用场景

(1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

(2)虚拟代理,是根据需要创建开销很大的对象。通过他来存放实例化需要很长时间的真实对象。例如:图片加载的时候。

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

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

根本原理:代理模式其实就是在访问对象的时候引入了一定程度的间接性,因为这种间接性,可以附加多种用途。


四、C++实现

(1)Proxy.h

[cpp] view plaincopy
  1. #include <iostream>
  2. #include <string>
  3. //SchoolGirl类
  4. class SchoolGirl
  5. {
  6. private:
  7. std::string name;
  8. public:
  9. void setName(std::string name)
  10. {
  11. this->name=name;
  12. }
  13. std::string getName()
  14. {
  15. return name;
  16. }
  17. };
  18. //Subject类,定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方使用Proxy
  19. class IGiveGift
  20. {
  21. public:
  22. virtual void GiveDolls()=0;
  23. virtual void GiveFlowers()=0;
  24. virtual void GiveChocolate()=0;
  25. };
  26. //RealSubject类,定义了Proxy所代表的真实实体
  27. class Pursuit:public IGiveGift
  28. {
  29. private:
  30. SchoolGirl* mm;
  31. public:
  32. Pursuit(SchoolGirl* mm)
  33. {
  34. this->mm=mm;
  35. }
  36. void GiveDolls()
  37. {
  38. std::cout<<mm->getName()<<"  送你洋娃娃"<<std::endl;
  39. }
  40. void GiveFlowers()
  41. {
  42. std::cout<<mm->getName()<<"  送你鲜花"<<std::endl;
  43. }
  44. void GiveChocolate()
  45. {
  46. std::cout<<mm->getName()<<"  送你巧克力"<<std::endl;
  47. }
  48. };
  49. //Proxy类,保存一个引用是的代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体
  50. class Proxy:public IGiveGift
  51. {
  52. private:
  53. Pursuit* gg;
  54. public:
  55. Proxy(SchoolGirl* mm)
  56. {
  57. gg=new Pursuit(mm);
  58. }
  59. void GiveDolls()
  60. {
  61. gg->GiveDolls();
  62. }
  63. void GiveFlowers()
  64. {
  65. gg->GiveFlowers();
  66. }
  67. void GiveChocolate()
  68. {
  69. gg->GiveChocolate();
  70. }
  71. };

(2)main.cpp

[cpp] view plaincopy
  1. #include "Proxy.h"
  2. #include <iostream>
  3. #include <stdlib.h>
  4. //Client,客户端
  5. void main()
  6. {
  7. SchoolGirl* jiaojiao=new SchoolGirl();
  8. jiaojiao->setName("李娇娇");
  9. Proxy* daili=new Proxy(jiaojiao);
  10. daili->GiveDolls();
  11. daili->GiveFlowers();
  12. daili->GiveChocolate();
  13. delete jiaojiao;
  14. jiaojiao=NULL;
  15. delete daili;
  16. daili=NULL;
  17. system("pause");
  18. }

(3)运行截图

from:http://blog.csdn.net/xiqingnian/article/details/41970165

大话设计模式C++实现-第7章-代理模式相关推荐

  1. 【设计模式】第二章 代理模式

    第二章 代理模式 文章目录 第二章 代理模式 一.简介 一.静态代理 二.动态代理 1.JDK 代理 2.CGLib 代理 三.总结 一.简介 你可能会对这个设计模式感到陌生,但是你对 Spring ...

  2. 第 15 章 代理模式

    第 15 章 代理模式 1.代理模式的基本介绍 代理模式:为一个对象提供一个替身,以控制对这个对象的访问. 即通过代理对象访问目标对象. 代理对象的好处是:可以在目标对象实现的基础上,增强额外的功能操 ...

  3. 【设计模式2022】第六章 建造者模式

    [设计模式2022]第六章 建造者模式 文章目录 [设计模式2022]第六章 建造者模式 一.建造者模式 1.结构 2.案例 3.分析 4.使用场景 5.扩展 6.对比工厂模式 一.建造者模式 将一个 ...

  4. 【设计模式2022】第四章 工厂模式

    [设计模式2022]第四章 工厂模式 文章目录 [设计模式2022]第四章 工厂模式 一.概述 二.简单工厂模式 1.结构 2.实现 3.分析 4.扩展 三.工厂方法模式 1.结构 2.实现 3.分析 ...

  5. 对设计模式的总结之装饰模式与代理模式

    前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓 ...

  6. 《大话设计模式》之--第7章 为别人做嫁衣----代理模式

    第7章 为别人做嫁衣----代理模式 7.1为别人做嫁衣 "小菜,今天见这个叫娇娇的美女见得如何呀?"大鸟一回家来就问小菜. "唉,别提了,人家是有男朋友的." ...

  7. [大话设计模式C++版] 第17章 在NBA我需要翻译 —— 适配器模式

    源码可以在这里找到 大话设计模式C++版 篮球翻译适配器 //Player.h 球员基类 #include <QString>class Player {protected:QString ...

  8. [大话设计模式C++版] 第12章 牛市股票还会亏钱 —— 外观模式

    源码可以在这里找到 大话设计模式C++版 股民炒股代码 //main.cpp #include <iostream>using namespace std;//股票1 class Stoc ...

  9. [大话设计模式C++版] 第14章 老板回来,我不知道 —— 观察者模式

    源码可以在这里找到 大话设计模式C++版 双向耦合的代码 //Secretary.h 秘书类 #include <QList>using namespace std; class Stoc ...

  10. [大话设计模式C++版] 第13章 好菜每回味不同 —— 建造者模式

    源码可以在这里找到 大话设计模式C++版 建造小人一 实现画小人的程序 //Widget.cpp void Widget::paintEvent(QPaintEvent *event) {QPaint ...

最新文章

  1. leetcode每日一题系列——881. 救生艇
  2. Python 3标准库,[美] 道格·赫尔曼(Doug Hellmann)
  3. maven springboot 除去指定的jar包_1. Spring Boot概述
  4. Linux 内核编码风格【转】
  5. 黑洞内外,时空弯曲的漩涡
  6. 简单易懂的 Raft 分布式共识算法讲义
  7. Java并发编程之CountDownLatch闭锁
  8. TIOBE 11 月榜单:C、Swift、Go、D 与 Rust 起起伏伏
  9. 数据结构与算法python—13.堆及python实现与leetcode总结
  10. Google 中国招聘啦
  11. MC9S12XEP100 本地RAM不够用了怎么办
  12. OpenCms显示默认作者
  13. 数据库系统概论-数据库系统阶段的特点
  14. 基于esp32 的时间系统
  15. 某年的月初月末时间戳获取
  16. axios在ie浏览器下提示promise未定义
  17. 年薪30万+的HR这样做数据分析!(附关键指标免费模版)
  18. python写文件byte_python 将字节写入文本文件
  19. iNotePad流氓软件卸载
  20. 微博解析:微博揭晓年度百大视频号!视频号规模超50万的背后透露着什么讯息?

热门文章

  1. win10 c盘压缩卷只能压出一半?或只能压缩出一点空间的完美解决方案
  2. python中的cols_openpyxl读取列数据或指定行列之iter_cols方法
  3. 不求人小白也能搭建私有云盘,焕然一新体验
  4. 调用微信公众号现金红包接口给用户发送红包
  5. 检查网络端口是否正常
  6. xshell下载安装
  7. SPEA将出席MWS China 2022
  8. (附源码)ssm市级疫情防控管理 毕业设计 030957
  9. 通过UEFI引导模式修改RAID卡jbod配置
  10. Unity Shader - ARB_precision_hint_fastest / ARB_precision_hint_nicest 命令