一、原理讲解

代理模式也可以称作为委托,对对象的业务的委托。

1.1意图

为其它对象提供一种代理,以控制对这个对象的访问。

1.2应用场景

1.2.1远程代理(remote proxy)

  • 为一个对象在不同的地址空间提供局部代表;

1.2.2虚代理(virtual proxy)

  • 根据需要创建开销很大的对象;

1.2.3保护代理(protection proxy)

  • 控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候;

1.2.4智能引用(smart reference)

  • 对指向实际对象的引用计数器,这样当该对象没有引用时,可以自动释放它;
  • 当第一次引用一个持久对象时,将它装入内存;
  • 在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它;

1.3结构图(UML图)

1.4代码实现步骤

a1 定义一个主题接口类ISubject,定义一个接口函数request();
a2 定义一个真实主题类RealSubject,实现接口函数request();
a3 定义一个代理类(或者称为委托类)Proxy,实现接口函数request(),并且在该函数内调用具体类RealSubject业务逻辑功能函数RealSubject::request()实现对具体类RealSubject对象的业务逻辑功能代理和访问权限控制;

二、实现代码

ProxyPattern.cpp

#include <iostream>using namespace std;#define DELETE(pointer) delete pointer; pointer=nullptrclass ISubject
{public:virtual ~ISubject() {}virtual void request() = 0;
};class RealSubject : public ISubject
{public:virtual void request() override { cout << "RealSubject::request()!" << endl; }
};class Proxy : public ISubject
{public:Proxy() { subject = new RealSubject(); }~Proxy() { DELETE(subject); }void request() override {cout << "begin proxy!" << endl;subject->request();cout << "end proxy!" << endl;}private:ISubject *subject;
};void doProxyPattern()
{   Proxy *proxy = new Proxy();proxy->request();DELETE(proxy);
}

mian.cpp

#include <iostream>extern void doProxyPattern();int main()
{doProxyPattern();system("pause");return 1;
}

三、总结

代理模式也可以称为委托模式,主要优点实现了业务功能(RealSubject::request())和业务逻辑分离(Proxy::request()),缺点是通过第三方类来调用逻辑复杂,调用出错的话可能会产生其它意外错误。也就是说,代理模式的优点,恰恰也是其缺点。

四、参考内容

设计模式之代理模式(C++)
https://www.cnblogs.com/lang5230/p/5322668.html
陈建忠设计模式(参考:哔哩哔哩C++设计模式!!!)
Erich Gamma,Richard Helm.《设计模式 可复用面向对象软件的基础》[M].机械工业出版社,2019:

C++设计模式——代理模式(proxy pattern)相关推荐

  1. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

  2. 设计模式——代理模式(Proxy Pattern)之为别人做嫁衣

    代理模式Proxy Pattern 代理模式 1.背景 2.定义 3.特征 4.应用场景 5.实验案例 参考 代理模式 1.背景 假如说我现在想租一间房子,虽然我可以自己去找房源,做卫生检测等一系列的 ...

  3. Java24种设计模式(第二种)--代理模式(Proxy Pattern)

    Java24种设计模式 (第二种) 一.代理模式(Proxy Pattern) 模式逻辑: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事 ...

  4. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这 ...

  5. js设计模式——代理模式proxy

    什么是代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问. (可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy) 如何实现代理模式 代理对象内部含有对本 ...

  6. 设计模式(结构型)之代理模式(Proxy Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  7. JAVA设计模式Design Pattern→单例模式Singleton Pattern、工厂模式Factory Pattern、代理模式Proxy Pattern

    私有化构造函数的类可以提供相应的 "接口"(一般就是静态方法)来返回自己的唯一实例供外部调用,像这样的确保只生成一个实例的模式被称作单例模式. 工厂模式,一个模型,用来大规模的生产 ...

  8. 代理模式(Proxy Pattern)

    设计模式 - 吕震宇 .NET设计模式系列文章 薛敬明的专栏 乐在其中设计模式(C#) C#设计模式(13)-Proxy Pattern 一. 代理(Proxy)模式 代理(Proxy)模式给某一个对 ...

  9. C++设计模式--代理模式(Proxy)

    前言 C++相对其他编程语言来说算是比较难的了,相关知识点非常多,并且有些概念理解起来比较困难,对于初学者来说可能会感觉到非常痛苦.随着项目难度的升级,需要不断地优化框架从而使整个结构更具有扩展性,那 ...

  10. 趣谈设计模式 | 代理模式(Proxy):利用代理来控制对象的访问

    文章目录 案例:房屋中介 代理模式 代理模式与装饰器模式 代理模式的应用 远程代理 虚拟代理 安全代理 智能引用代理 写时拷贝代理 总结 完整代码与文档 由于代理模式相较于前面的其他设计模式来说更加简 ...

最新文章

  1. C# 如何以参数的形式调用.exe程序
  2. android 语音自动播报,Android 语音播报实现
  3. js 事件流的事件冒泡和事件捕获与阻止事件传播
  4. C#.NET 可以为不同的客户定制不同的登录窗体的设计思路参考【功能代码组件化,可以灵活选配】...
  5. visio中公式太小_串并联管道中调节阀的工作流量特性分析
  6. ftp安装包_【干货分享】原来cisco通过FTP,TFTP系统升级是这样做的?
  7. es6+angular1.X+webpack 实现按路由功能打包项目
  8. Hive总结(十二)Hive查询进阶
  9. Perl语言的常用符号
  10. sketchup 草图 大师 使用笔记
  11. 物联网和工业物联网有什么区别?
  12. 图片标签及以图搜图场景应用
  13. 树莓派linux led字符设备驱动( linux自带)
  14. ASP.NET 发送电子邮件 smtp
  15. html祝福语,日常祝福语大全简短的
  16. ewebeditor漏洞大全
  17. 防止 rm -rf / 删根跑路——使用 safe-rm 替代 rm
  18. java argument type mismatch_解决mybatisplus插入报错argument type mismatch的问题
  19. 大学计算机Excel咨询表,大学计算机(二)第十一讲 Excel图表分析
  20. 用Python去优惠券,看到结果我惊呆了!

热门文章

  1. 《Automatic Image-Based WasteClassification》论文笔记
  2. JavaScript 调用 C++/Qt 工程(附有代码 + demo)
  3. 5、访谈《数据收集工具与技术》
  4. Unity+GME 腾讯新版的游戏语音(游戏多媒体引擎)
  5. Win10系统通过VMware安装Centos7,部署KVM安装WIN7虚拟机
  6. java date类 时区_Java时区转换及Date类实现原理解析
  7. OpenType™ Layout通用表格式
  8. 文件服务器 excle 变为temp,excel没保存关了【WPS的excel表格保存之后变成tmp】
  9. 报错no all patern found!和 Error on Generate Activation Code...
  10. 超详细!少数人才知道的 Python 函数定义详解