C++设计模式---代理模式

1、介绍

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一个代理或占位符,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。

代理模式组成部分:

(1)目标对象(Real Subject):代理对象所代表的真实对象,是最终要引用的对象。

(2)代理对象(Proxy):持有目标对象的引用,控制对目标对象的访问,并可能提供额外的功能。

(3)客户端(Client):使用代理对象来访问目标对象,通常不会直接访问目标对象。

代理模式的分类:

(1)远程代理(Remote Proxy):为一个位于不同地址空间的对象提供一个本地的代理对象,这个对象作为该远程对象的代表,以隐藏一个对象存在于不同地址空间的事实。

(2)虚拟代理(Virtual Proxy):根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象的引用,真实对象只在需要时才会被真正创建。

(3)保护代理(Protect Proxy):控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的情况。

(4)智能引用代理(Smart Reference Proxy):取代了简单的指针,它在访问对象时执行一些附加操作,比如将每一次的访问计数。

2、示例

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

// 抽象角色
class subject
{
public:
	virtual void Request() = 0 {}
};

// 真实角色
class Consubject:public subject
{
public:
	void Request(); //实现了在抽象角色中定义的方法
};

void Consubject::Request() //重载
{
	cout << "ConRequest" << endl;
}

// 代理角色
class Proxy
{
public:
	Proxy() {}
	Proxy(subject* sub)
	{
		m_sub = sub;   //代理角色中定义了一个真实角色对象
	}
	~Proxy()
	{
		delete m_sub;
	}
	void Request()                    //代理角色也实现了抽象角色的方法
	{
		cout << "Proxy REQ" << endl;
		m_sub->Request();            //代理角色调用真实角色的业务方法
	}
private:
	subject* m_sub;
};

void main()
{
	subject* sub = new Consubject();   //真实角色对象
	Proxy* p = new Proxy(sub);         //定义代理对象
	p->Request();
}

结果:

cpp 复制代码
Proxy REQ
ConRequest
相关推荐
Want5954 分钟前
C/C++贪吃蛇小游戏
c语言·开发语言·c++
草莓熊Lotso1 小时前
《算法闯关指南:动态规划算法--斐波拉契数列模型》--01.第N个泰波拉契数,02.三步问题
开发语言·c++·经验分享·笔记·其他·算法·动态规划
草莓熊Lotso2 小时前
Git 分支管理:从基础操作到协作流程(本地篇)
大数据·服务器·开发语言·c++·人工智能·git·sql
报错小能手2 小时前
C++异常处理 终极及总结
开发语言·c++
Algo-hx2 小时前
C++编程基础(九):预处理指令
c++
在未来等你8 小时前
AI Agent设计模式 Day 19:Feedback-Loop模式:反馈循环与自我优化
设计模式·llm·react·ai agent·plan-and-execute
凌康ACG9 小时前
Sciter之c++与前端交互(五)
c++·sciter
郝学胜-神的一滴11 小时前
Linux命名管道:创建与原理详解
linux·运维·服务器·开发语言·c++·程序人生·个人开发
晚风(●•σ )11 小时前
C++语言程序设计——11 C语言风格输入/输出函数
c语言·开发语言·c++
恒者走天下13 小时前
秋招落定,拿到满意的offer,怎么提高自己实际的开发能力,更好的融入团队
c++