
设计模式之代理模式
类图角色和职责
发布日期:2021-05-07 15:14:40
浏览次数:30
分类:原创文章
本文共 1457 字,大约阅读时间需要 4 分钟。
目录
代理模式
概念
- Proxy模式又叫做代理模式,是构造型的设计模式之一,它可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。
- 所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。
类图角色和职责

- subject(抽象主题角色):
- 真实主题与代理主题的共同接口。
- RealSubject(真实主题角色):
- 定义了代理角色所代表的真实对象。
- Proxy(代理主题角色):
- 含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真实主题对象之前或者之后执行某些操作,而不是单纯返回真实的对象。
- 适合于:
- 为其他对象提供一种代理以控制对这个对象的访问。
案例1
- 理论模型
- 提示:a中包含b类;a、b类实现协议类protocol
#include <string>#include <iostream>using namespace std;//定义接口class Interface{public: virtual void Request()=0;};//真实类class RealClass : public Interface{public: virtual void Request() { cout<<"真实的请求"<<endl; }};//代理类class ProxyClass : public Interface{private: RealClass* m_realClass;public: void SetRealSubject(RealSubject *rs) { m_realClass = rs; } virtual void Request() { m_realClass= new RealClass(); m_realClass->Request(); delete m_realClass; }};//客户端:int main(){ ProxyClass* test=new ProxyClass(); test->Request(); return 0;}
案例2
- 出版社被代理对象,要卖书
- 淘宝(网上书店),代理对象
- 客户端通过淘宝进行买书。
class Subject{public: virtual void SaleBook() = 0;};class RealSubject : public Subject{public: virtual void SaleBook() { cout << "实体店买书....\n"; }};class ProxyTaoBao : public Subject{public: void SetRealSubject(RealSubject *rs) { m_s = rs; } virtual void SaleBook() { Double11(); m_s->SaleBook(); } void Double11() { cout << "Double11 打折 半价" << endl; }private: RealSubject *m_s;};void main61(){ ProxyTaoBao *ptb = new ProxyTaoBao; ptb->SaleBook(); delete ptb; return ;}
【注】参考传智扫地僧C++设计模式
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月30日 09时25分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2021-05-09
【设计模式】单例模式
2021-05-09
【SpringCloud】Hystrix熔断器
2021-05-09
【Linux】2.3 Linux目录结构
2021-05-09
java.util.Optional学习笔记
2021-05-09
远程触发Jenkins的Pipeline任务的并发问题处理
2021-05-09
jackson学习之七:常用Field注解
2021-05-09
jackson学习之八:常用方法注解
2021-05-09
Web应用程序并发问题处理的一点小经验
2021-05-09
entity framework core在独立类库下执行迁移操作
2021-05-09
Asp.Net Core 2.1+的视图缓存(响应缓存)
2021-05-09
服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
2021-05-09
没花一分钱的我竟然收到的JetBrains IDEA官方免费赠送一年的Licence
2021-05-09
Redis 集合统计(HyperLogLog)
2021-05-09
RE套路 - 关于pyinstaller打包文件的复原
2021-05-09
【wp】HWS计划2021硬件安全冬令营线上选拔赛
2021-05-09
Ef+T4模板实现代码快速生成器
2021-05-09
dll详解
2021-05-09
c++ static笔记
2021-05-09
C++中头文件相互包含与前置声明
2021-05-09