【23】c++设计模式——>代理模式

代理模式定义

C++中的代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过引入一个代理对象来控制对另一个对象的访问。

代理模式通常涉及以下几个角色:

1.抽象主题(Subject):定义了真实主题和代理主题的共同接口,这样代理可以在任何时候都可以替代真实主题。

2.真实主题(Real Subject):是实际执行业务逻辑的对象,代理将请求委托给真实主题。

3.代理(Proxy):拥有与真实主题相同的接口,它可以访问、控制或者扩展真实主题的功能。代理对象持有真实主题对象的引用,并在必要时创建、管理或销毁真实主题对象。

使用代理模式的主要目的是在不修改现有代码的情况下,为对象提供额外的功能或控制对对象的访问。代理可以在真实主题执行前后进行一些预处理或后处理操作,例如权限验证、缓存、延迟加载等。代理还可以隐藏真实主题的细节,将客户端与真实主题解耦,从而提高代码的灵活性和可维护性。

实例应用场景:

VPN架梯子访问外网

电话虫代码实例

电话虫是代理,人是真实主题

cpp 复制代码
#include<iostream>
using namespace std;

//抽象通信类
class Communication 
{
public:
	virtual void comminicate() = 0; //通话
	virtual ~Communication() {}
};

//然后在根据这个抽象类,派生出两个子类:讲话者类和电话虫类
/*幕后讲话的人*/
class Speaker :public Communication
{
public:
	void comminicate() override
	{
		cout << "开始说话..." << endl;
		cout << "通话时发生了一些列的表情变化..." << endl;
	}
};

/*代理:电话虫*/
class DenDenMushi :public Communication
{
public:
	DenDenMushi()
	{
		m_isStart = true;
		m_speaker = new Speaker; //幕后讲话的人
	}
	~DenDenMushi()
	{
		if (m_speaker != nullptr)
		{
			delete m_speaker;
		}
	}
	bool isStart()
	{
		return m_isStart;
	}
	void comminicate()
	{
		if (isStart())
		{
			cout << "======" << endl;
			m_speaker->comminicate();
		}
	}
private:
	bool m_isStart = false; //是否开始讲话
	Speaker * m_speaker = nullptr;
};
int main()
{
	//直接交流
	Speaker* s = new Speaker();
	s->comminicate();
	delete s;
	//代理讲话
	DenDenMushi* d = new DenDenMushi();
	d->comminicate();
	delete d;
	return 0;
}
相关推荐
liangshanbo12154 小时前
虚拟列表深度面试题整理
java·开发语言·前端
ZISHU_9874 小时前
用 TLabel 给 SynTouch BioTac 数据做语义标注:从原始信号到结构化标注
开发语言·人工智能·python·数据·机器人触觉
略略略咯咯4 小时前
C#Unity
开发语言·unity·c#
gugucoding4 小时前
59. 【Java】Spring Boot 入门:第一个 Web 应用
java·开发语言·spring boot
ShineWinsu4 小时前
对于C++:C++20中线程、初始化、Lambda与内存视图等特性的解析
c++·c++20
lilian2335 小时前
Harmony os 技术实战|拼豆制图43:压缩字符矩阵上线前如何拦住错位图纸
开发语言·前端·华为·矩阵·harmonyos
进击ing小白5 小时前
Qt 无边框窗口进阶指南
开发语言·qt
点我头像干啥5 小时前
004:多个PDF文件合并
开发语言·pdf·php
En^_^Joy5 小时前
Cadence Skill脚本语言快速入门指南
开发语言
10mAh5 小时前
【Java】HashMap 的 put 到底做了什么?——冲突、扩容与树化实测
java·开发语言·hash