【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;
}
相关推荐
Y1rong13 分钟前
C++ QT之记事本
开发语言·qt
ZouZou老师3 小时前
C++设计模式之装饰器模式:以家具生产为例
c++·设计模式·装饰器模式
ZouZou老师4 小时前
C++设计模式之桥接模式:以家具生产为例
c++·设计模式·桥接模式
diegoXie4 小时前
Python / R 向量顺序分割与跨步分割
开发语言·python·r语言
程序员小白条4 小时前
0经验如何找实习?
java·开发语言·数据结构·数据库·链表
呱呱巨基4 小时前
Linux 进程概念
linux·c++·笔记·学习
liulilittle4 小时前
C++ 浮点数封装。
linux·服务器·开发语言·前端·网络·数据库·c++
ZouZou老师4 小时前
C++设计模式之组合模式:以家具生产为例
c++·设计模式·组合模式
yong15858553434 小时前
2. Linux C++ muduo 库学习——原子变量操作头文件
linux·c++·学习
失散135 小时前
Python——1 概述
开发语言·python