【C++】【设计模式】代理模式(Proxy Pattern)
定义
- 结构型模式
- 给某一个对象提供一个代 理,并由代理对象控制对原对象的引用
结构
UML类图
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bdc6aadf8ed4442cb073ac4dd4c8fc7f.png)
Demo源码
#include <iostream>
#include <string>
// 抽象主题类
class Subject {
public:
virtual ~Subject() {}
virtual void request() = 0;
};
// 真实主题类
class RealSubject : public Subject {
public:
void request() override {
std::cout << "RealSubject: Handling request." << std::endl;
}
};
// 代理类
class Proxy : public Subject {
public:
Proxy(std::string ip, int port) : m_ip(ip), m_port(port), m_subject(nullptr) {}
~Proxy() { delete m_subject; }
void request() override {
if (!m_subject) {
connect();
}
m_subject->request();
}
private:
std::string m_ip;
int m_port;
RealSubject* m_subject;
void connect() {
std::cout << "Proxy: Connecting to " << m_ip << ":" << m_port << "." << std::endl;
// 模拟网络连接过程,实例化远程主题对象
m_subject = new RealSubject();
}
};
int main() {
// 客户端通过代理对象访问远程主题
Proxy proxy("127.0.0.1", 8080);
proxy.request();
return 0;
}
分析
- 可以在访问目标对象之前或之后执行一些附加操作,比如权限检查、延迟加载或缓存等
- 方便附加操作
- 解耦
- 拓展方便
- 增加一些复杂性和性能开销