【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;
}
相关推荐
2zcode27 分钟前
基于MATLAB深度卷积特征的多曝光图像自适应融合系统设计与实现
开发语言·matlab·多曝光图像自适应融合系统
保持清醒5401 小时前
类和对象上
c++
hold?fish:palm1 小时前
7 接雨水
开发语言·c++·leetcode
geats人山人海2 小时前
c# 第九章 record
开发语言·c#
早期的虫儿有鸟吃2 小时前
vue2--Vuex 模块化
开发语言·前端·javascript
浪客川2 小时前
Android的SystemUI的启动流程简析
android·开发语言
流浪0012 小时前
数据结构篇(五):线性表——栈
数据结构·c++·算法
郝学胜-神的一滴2 小时前
中级OpenGL教程 022:探秘三维世界的血脉传承——物体父子关系与矩阵递归奥义
c++·线性代数·unity·矩阵·游戏引擎·unreal engine·opengl
-银雾鸢尾-2 小时前
C#中的抽象类与抽象方法
开发语言·c#
萧瑟余晖3 小时前
JDK 20 新特性详解
java·开发语言