结构型模式-代理模式

代理模式的理论

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

举例:

比如这里面服务器B的test可能还没写好,A访问不了,先访问代理类,写好了代替再代替访问

代理模式的案例

传统方法局限:是个人都能调用

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


//提供一种代理来控制对其他对象的访问

class AbstraactCommonInterface {
public:
	virtual void run() = 0;

};

//我已经写好的系统
class Mysystem {
public:
	virtual void run() {
		cout << "系统启动..." << endl;
	}
};

//必须有权限验证,不是所有人都能来启动我的启动,必须提供用户名和密码



int main() {
	//这样不行。是个人都能启动
	Mysystem* system = new Mysystem;
	system -> run();

	return 0;
}

代理模式

优点:必须有权限验证,不是所有人都能来启动我的启动,必须提供用户名和密码

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

//提供一种代理来控制对其他对象的访问
class AbstraactCommonInterface {
public:
	virtual void run() = 0;

};

//我已经写好的系统
class Mysystem :public AbstraactCommonInterface{
public:
	virtual void run() {
		cout << "系统启动..." << endl;
	}
};

//必须有权限验证,不是所有人都能来启动我的启动,必须提供用户名和密码
class MysystemProxy :public AbstraactCommonInterface {
public:
	MysystemProxy(string username,string password) {
		this->mUsername = username;
		this->mPassword = mPassword;
		
	}
	bool checkUsernameAndPassword() {
		if (mUsername == "admin"&&mPassword == "admin") {
			return true;
		}
		return false;
	}
	virtual void run() {
		if (checkUsernameAndPassword()) {
			cout << "用户名和密码正确,验证通过..." << endl;
			this->pSystem->run();
		}
		else {
			cout << "用户名或密码错误,权限不足...." << endl;
		}
	}
	~MysystemProxy() {
		if (pSystem != NULL) {
			delete pSystem;
		}
	}
public:
	Mysystem* pSystem;
	string mUsername;
	string mPassword;
};

void test01() {
	MysystemProxy* proxy = new MysystemProxy("root","admin");
	proxy->run();
}


int main() {
#if 0
	//这样不行。是个人都能启动
	Mysystem* system = new Mysystem;
	system -> run();
#endif
	//调用代理模式
	test01();
	return 0;
}

代理模式的举例

(1)上外网

(2)缓冲服务器

代理模式的优缺点

优点:

(1)能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。

(2)客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性。

缺点:

代理实现较为复杂。

代理模式的适用场景

为其他对象提供一种代理以控制对这个对象的访问。

相关推荐
y = xⁿ11 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
「QT(C++)开发工程师」13 小时前
C++ auto 用法详解
开发语言·c++
OPEN-F14 小时前
C++STL教程:容器适配器与实用工具
开发语言·c++
OPEN-F14 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
有点。14 小时前
C++二叉搜索树进阶
开发语言·c++
HugoStudio_SWAN14 小时前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
sakiko_15 小时前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
kyle~16 小时前
C++_STL---迭代器失效
开发语言·c++
自小吃多16 小时前
器件移动、旋转、镜像、对齐、等间距操作笔记
笔记·嵌入式硬件
wuminyu17 小时前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++