【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;
}
相关推荐
qq_334903157 分钟前
高性能网络协议栈
开发语言·c++·算法
光电笑映9 分钟前
STL 源码解剖系列:map/set 的底层复用与红黑树封装
c语言·数据结构·c++·算法
老四啊laosi10 分钟前
[C++进阶] 19. map && set的使用
c++·set·map·算法题
阿贵---11 分钟前
模板编译期循环展开
开发语言·c++·算法
2601_9540236611 分钟前
Beyond the Hype: Deconstructing the 2025 High-Performance Stack for Agencies
java·开发语言·算法·seo·wordpress·gpl
l1t15 分钟前
DeepSeek 辅助编写python程序求解欧拉计划932题:2025数
开发语言·python·欧拉计划
ysa05103017 分钟前
二分+前缀(预处理神力2)
数据结构·c++·笔记·算法
2401_8331977318 分钟前
嵌入式C++电源管理
开发语言·c++·算法
ms_27_data_develop21 分钟前
Java——集合
java·开发语言
灰色小旋风22 分钟前
力扣22 括号生成(C++)
开发语言·数据结构·c++·算法·leetcode