C++代理模式
2022/3/1 22:22:26
本文主要是介绍C++代理模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
代理模式:
1、代理模式简介
为其它对象提供一种代理以控制这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。
代理模式按照使用场景来划分可分为多种,如:远程代理、虚拟代理、防火墙代理、Cache代理及智能引用代理等。但是不管是哪种代理模式只是在使用场景上有所区分,而在具体的实现思想上则大致相同。
2、代理模式的使用场景
主要是为其他对象提供一种代理以控制对这个对象的访问。如现有A对象和C对象,C对象想要访问A对象,在这个流程中就可按照需求及场景来使用代理模式,通过引用B对象来实现C对象对A对象的访问(C->B->A)
3、和适配器及装饰者模式的区别
适配器模式主要是为了解决两个类或工程中需要互相耦合但是接口不兼容的问题,适配器模式对其中一个类加一层封装之后提供可调用的接口给另一个类。从而达到接口兼容的目的;装饰器模式则是在原有的类中增加新的功能,在不违背六大设计原则的前提下实现扩展的目的;相比较两者而言,代理类模式则主要是相当于增加了一个中间层,在中间层做一些必要的处理。
优点:
职责清晰。真实的角色只负责实现实际的业务逻辑,不用关心其它非本职责的事务,通过后期的代理完成具体的任务。这样代码会简洁清晰。
代理对象可以在客户端和目标对象之间起到中介的作用,这样就保护了目标对象。
扩展性好。
/* * 关键代码:一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理对象实现同一个接口,先访问代理* 类再访问真正要访问的对象。 */ #include <iostream> using namespace std; class Gril { public: Gril(const string& name = "gril"):m_string(name){} string getName() { return m_string; } private: string m_string; }; class Profession { public: virtual ~Profession(){} virtual void profess() = 0; }; class YoungMan : public Profession { public: YoungMan(const Gril& gril):m_gril(gril){} void profess() { cout << "Young man love " << m_gril.getName().data() << endl; } private: Gril m_gril; }; class ManProxy : public Profession { public: ManProxy(const Gril& gril):m_pMan(new YoungMan(gril)){} ~ManProxy() { delete m_pMan; m_pMan = nullptr; } void profess() { m_pMan->profess(); } private: YoungMan* m_pMan; }; int main(int argc, char *argv[]) { Gril gril("heihei"); ManProxy* proxy = new ManProxy(gril); proxy->profess(); delete proxy; proxy = nullptr; return 0; }
这篇关于C++代理模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享