【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;
}
相关推荐
李匠20247 分钟前
C++GO语言微服务之Dockerfile && docker-compose②
c++·容器
于壮士hoho37 分钟前
Python | Dashboard制作
开发语言·python
2301_8035545238 分钟前
c++和c的不同
java·c语言·c++
Darkwanderor39 分钟前
c++STL-通用(反向)迭代器适配器
c++
Magnum Lehar1 小时前
3d游戏引擎的Utilities模块实现
c++·算法·游戏引擎
Asus.Blogs2 小时前
为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?
开发语言·后端·golang
青瓦梦滋2 小时前
【语法】C++的多态
开发语言·c++
C_V_Better2 小时前
Java Spring Boot 控制器中处理用户数据详解
java·开发语言·spring boot·后端·spring
t198751282 小时前
基于Qt的OSG三维建模
java·开发语言
AI视觉网奇3 小时前
3d关键点 可视化
开发语言·python·pygame