代理模式

概念

Proxy 模式又叫做代理模式,是结构型的设计模式之一,它可以为其他对象提供一 种代理(Proxy)以控制对这个对象的访问。
所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须 通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些 特别的处理。

类图与各个角色

  1. subject(抽象主题角色): 真实主题与代理主题的共同接口。
  2. RealSubject(真实主题角色) : 定义了代理角色所代表的真实对象。
  3. Proxy(代理主题角色): 含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真是主题对象之前或 者之后执行某些操作,而不是单纯返回真实的对象。

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

示例1

#include<iostream>
#include<string>
using namespace std;//提供一种代理来控制对其他对象的访问
class  AbstractCommonInterface{public://用来启动系统virtual void run() = 0;
};//系统有权限验证,需要提供用户名和密码
//系统类
class MySystem{public:virtual void run() {cout << "系统启动" << endl;}
};//代理类
class MySystemProxy :public AbstractCommonInterface{public:MySystemProxy(string username, string password){this->mUsername = username;this->mPassword = password;pSystem = new MySystem;}//判断用户名和密码是否为正确bool checkUsernameAndPassword(){if (mUsername == "admin" && mPassword == "admin"){return true;}return false;}virtual void run(){if (checkUsernameAndPassword()){cout << "启动成功" << endl;this->pSystem->run();}else{cout << "用户名或密码错误,无法启动系统" << endl;}}~MySystemProxy(){if (pSystem != NULL){delete pSystem;}}private:MySystem *  pSystem;string mUsername;  //用户名string mPassword; //密码
};void test01(){MySystemProxy * proxy = new MySystemProxy("admin", "admin");proxy->run();
}int main(void){test01();system("pause");return 0;
}
## 案例
实现在淘宝网上的网上书店卖书
#include<iostream>
using namespace std;//
class Subject
{public:virtual void SaleBook() = 0;
};class RealSubject :public Subject
{public:virtual void SaleBook(){cout << "实体店买书.." << endl;}
};代理淘宝
//class ProxyTaoBao :public Subject
//{//public:;
//     virtual void Book()
//     {//         //
//         Double11();
//         RealSubject rs;
//         rs.SaleBook();
//         Double11();
//     }
//     void Double11(){//         cout << "Double11 打折 半价" << endl;
//     }
//};//代理淘宝
class ProxyTaoBao2 :public Subject
{
public: ProxyTaoBao2(){this->m_s = new RealSubject;}~ProxyTaoBao2(){delete m_s;}virtual void SaleBook() { Double11(); m_s->SaleBook(); } void Double11() { cout << "Double11 打折 半价" << endl; } private: RealSubject* m_s;
};int main(){ProxyTaoBao2 *ptb = new ProxyTaoBao2;ptb->SaleBook();delete ptb;system("pause");return 0;
}

设计模式7----代理模式相关推荐

  1. 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )

    文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...

  2. C++设计模式之代理模式

    这篇文章主要介绍了C++设计模式之代理模式,本文讲解了什么是代理模式.代理模式的使用场合.代理模式的实现代码等内容,需要的朋友可以参考下 前言 青春总是那样,逝去了才开始回味:大学生活也是在不经意间就 ...

  3. python中代理模式分为几种_Python设计模式之代理模式实例详解

    本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...

  4. 设计模式笔记——代理模式

    设计模式笔记--代理模式 代理模式介绍 代理模式通常是介于请求方和提供方的一个中介系统,请求方是发送请求的一方,提供方是根据请求提供相应资源的一方 Web中的代理服务器就是一个例子,客户端向代理服务器 ...

  5. 「设计模式(五) - 代理模式」

    「设计模式(五) - 代理模式」 一.处处可见的"代理" "代理"在平常生活司空见惯,点外卖,租房子找中介,买飞机票等等.基本上用手机就能完成,也就是不直接接触 ...

  6. Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之代理模式[讲师辅导]-969人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  7. 设计模式之一代理模式

    代理模式(代理设计模式) 代理模式的定义与特点 代理模式的结构与实现 代理模式(代理设计模式) 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代 ...

  8. 23种设计模式7_代理模式之一静态代理

    23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...

  9. Java中的设计模式:“代理模式”的理解

    代理模式定义: 为其他对象提供一种代理以控制对这个对象的访问.在面向对象中,有时候直接访问一些对象比较麻烦,所以代理模式就是在这个对象上加上一个访问该对象的访问层.类似于很多明星的事务实际都是交给经纪 ...

  10. 三国杀与设计模式之代理模式(Proxy)

    本人原博地址:http://blog.saymagic.cn/blog.php?id=17 三国杀案例:在五人局中,作为反贼的黄月英借黄忠的刀杀作为忠臣的夏侯惇,从这句话中我们可以总结出一个成语对不对 ...

最新文章

  1. Eclipse轻松玩转SmartFramework
  2. 用python绘制柱状图标题-使用Python绘制柱形竞赛图
  3. php设置key,phpstorm8 设置及license key
  4. 每日程序C语言29-将数组逆序输出
  5. do filtering will real delete note in DB
  6. CertUtil.exe被利用来下载恶意软件
  7. 「Luogu5395」【模板】第二类斯特林数·行
  8. php xmldom扩展,如何使用比根更深入的PHP DOM向XML添加新元素?
  9. SpringBoot配置logback日志 (六)
  10. go设置后端启动_Go语言基础(十四)
  11. 电机 matlab 仿真 实验总结,哈工大 电机学 MATLAB 仿真 实验报告.docx
  12. 中考计算机表格操作题,中考信息技术Excel操作题.xls
  13. 永洪BI开发脚本总结
  14. Windows服务器安全策略配置——简单实用
  15. js获取时间、节假日、节气
  16. 基于时空大数据的GIS技术,推动网格化管理创新发展
  17. Unity UGUI 图文混排
  18. 命令行运行coppeliasim(vrep)出现/usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.12‘ not found
  19. SPI 接口OLED 模块 - 兼容5V 和3.3V 电平
  20. [经典收藏]1200个Photoshop经典实例打造ps高手!

热门文章

  1. StringMVC 中如何做数据校验
  2. 财务部门:你需要多长时间才能够回答老板的这些问题?
  3. setTimeout里如果有$(this),$(this)指的是谁?
  4. mocha 测试 mysql_e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDrive
  5. saas物资管理界面设计_大型物流企业都在用的SaaS系统,看大规模运配网络如何实现精细化管理?...
  6. hydra mysql 爆破_Hydra(爆破神器)使用方法
  7. android拍照截图组件,Android截图命令screencap与视频录制命令screenrecord(示例代码)...
  8. java lambda 多个参数_Java Lambda行为参数化
  9. 4pics1word android,4 Pics 1 Word
  10. java 传递bean_如何将bean作为参数传递给JSP标记?