设计模式7----代理模式
代理模式
概念
Proxy 模式又叫做代理模式,是结构型的设计模式之一,它可以为其他对象提供一 种代理(Proxy)以控制对这个对象的访问。
所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须 通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些 特别的处理。
类图与各个角色
- subject(抽象主题角色): 真实主题与代理主题的共同接口。
- RealSubject(真实主题角色) : 定义了代理角色所代表的真实对象。
- 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----代理模式相关推荐
- 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )
文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...
- C++设计模式之代理模式
这篇文章主要介绍了C++设计模式之代理模式,本文讲解了什么是代理模式.代理模式的使用场合.代理模式的实现代码等内容,需要的朋友可以参考下 前言 青春总是那样,逝去了才开始回味:大学生活也是在不经意间就 ...
- python中代理模式分为几种_Python设计模式之代理模式实例详解
本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...
- 设计模式笔记——代理模式
设计模式笔记--代理模式 代理模式介绍 代理模式通常是介于请求方和提供方的一个中介系统,请求方是发送请求的一方,提供方是根据请求提供相应资源的一方 Web中的代理服务器就是一个例子,客户端向代理服务器 ...
- 「设计模式(五) - 代理模式」
「设计模式(五) - 代理模式」 一.处处可见的"代理" "代理"在平常生活司空见惯,点外卖,租房子找中介,买飞机票等等.基本上用手机就能完成,也就是不直接接触 ...
- Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程
Javascript 设计模式之代理模式[讲师辅导]-969人已学习 课程介绍 随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...
- 设计模式之一代理模式
代理模式(代理设计模式) 代理模式的定义与特点 代理模式的结构与实现 代理模式(代理设计模式) 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代 ...
- 23种设计模式7_代理模式之一静态代理
23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...
- Java中的设计模式:“代理模式”的理解
代理模式定义: 为其他对象提供一种代理以控制对这个对象的访问.在面向对象中,有时候直接访问一些对象比较麻烦,所以代理模式就是在这个对象上加上一个访问该对象的访问层.类似于很多明星的事务实际都是交给经纪 ...
- 三国杀与设计模式之代理模式(Proxy)
本人原博地址:http://blog.saymagic.cn/blog.php?id=17 三国杀案例:在五人局中,作为反贼的黄月英借黄忠的刀杀作为忠臣的夏侯惇,从这句话中我们可以总结出一个成语对不对 ...
最新文章
- Eclipse轻松玩转SmartFramework
- 用python绘制柱状图标题-使用Python绘制柱形竞赛图
- php设置key,phpstorm8 设置及license key
- 每日程序C语言29-将数组逆序输出
- do filtering will real delete note in DB
- CertUtil.exe被利用来下载恶意软件
- 「Luogu5395」【模板】第二类斯特林数·行
- php xmldom扩展,如何使用比根更深入的PHP DOM向XML添加新元素?
- SpringBoot配置logback日志 (六)
- go设置后端启动_Go语言基础(十四)
- 电机 matlab 仿真 实验总结,哈工大 电机学 MATLAB 仿真 实验报告.docx
- 中考计算机表格操作题,中考信息技术Excel操作题.xls
- 永洪BI开发脚本总结
- Windows服务器安全策略配置——简单实用
- js获取时间、节假日、节气
- 基于时空大数据的GIS技术,推动网格化管理创新发展
- Unity UGUI 图文混排
- 命令行运行coppeliasim(vrep)出现/usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.12‘ not found
- SPI 接口OLED 模块 - 兼容5V 和3.3V 电平
- [经典收藏]1200个Photoshop经典实例打造ps高手!
热门文章
- StringMVC 中如何做数据校验
- 财务部门:你需要多长时间才能够回答老板的这些问题?
- setTimeout里如果有$(this),$(this)指的是谁?
- mocha 测试 mysql_e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDrive
- saas物资管理界面设计_大型物流企业都在用的SaaS系统,看大规模运配网络如何实现精细化管理?...
- hydra mysql 爆破_Hydra(爆破神器)使用方法
- android拍照截图组件,Android截图命令screencap与视频录制命令screenrecord(示例代码)...
- java lambda 多个参数_Java Lambda行为参数化
- 4pics1word android,4 Pics 1 Word
- java 传递bean_如何将bean作为参数传递给JSP标记?