c++实现代理模式
时间: 2025-08-15 14:00:21 浏览: 4
代理模式(Proxy Pattern)是一种结构型设计模式,它通过一个代理对象来控制对另一个对象的访问。代理模式适用于需要增强对象功能、控制访问权限、延迟加载资源或远程调用等场景。
在 C++ 中,实现代理模式通常涉及以下几个关键角色:
- **Subject(主题)**:定义真实对象和代理对象的公共接口,确保两者可以互换使用。
- **RealSubject(真实主题)**:实现实际的业务逻辑。
- **Proxy(代理)**:持有真实对象的引用,控制对其的访问,并可以在调用前后执行额外操作。
以下是一个典型的 C++ 实现代理模式的示例:
```cpp
#include <iostream>
#include <memory>
// Subject 接口
class Subject {
public:
virtual void request() const = 0;
};
// RealSubject 实现
class RealSubject : public Subject {
public:
void request() const override {
std::cout << "RealSubject: Handling request." << std::endl;
}
};
// Proxy 实现
class Proxy : public Subject {
private:
std::shared_ptr<RealSubject> real_subject_;
void log_access() const {
std::cout << "Proxy: Logging the request." << std::endl;
}
public:
Proxy() : real_subject_(std::make_shared<RealSubject>()) {}
void request() const override {
if (this->check_access()) {
this->real_subject_->request();
this->log_access();
}
}
bool check_access() const {
// 模拟访问控制
std::cout << "Proxy: Checking access prior to firing a real request." << std::endl;
return true;
}
};
// 客户端代码
void client_code(const Subject &subject) {
subject.request();
}
```
### 示例使用
```cpp
int main() {
std::cout << "Client: Executing the client code with a real subject:\n";
RealSubject real_subject;
client_code(real_subject);
std::cout << "\nClient: Executing the client code with a proxy:\n";
Proxy proxy;
client_code(proxy);
return 0;
}
```
### 输出结果
```
Client: Executing the client code with a real subject:
RealSubject: Handling request.
Client: Executing the client code with a proxy:
Proxy: Checking access prior to firing a real request.
RealSubject: Handling request.
Proxy: Logging the request.
```
在这个示例中,`Proxy` 类在调用 `RealSubject` 的 `request()` 方法之前和之后分别执行了访问控制和日志记录的操作。这展示了代理模式如何在不修改真实对象的前提下,增强其行为。
该模式适用于需要对对象访问进行控制、延迟加载、日志记录或远程调用的场景,例如在分布式系统中使用远程代理(remote proxy)提供本地接口来访问远程对象[^2]。
---
###
阅读全文
相关推荐



















