1. 代理模式基础概念解析
在C++开发中,代理模式(Proxy Pattern)是一种常用的结构型设计模式,它通过创建一个代理对象来控制对原始对象的访问。这种模式的核心价值在于:在不修改原始类代码的前提下,为对象访问提供额外的控制层。
代理模式最常见的应用场景包括:
- 远程代理(Remote Proxy):为位于不同地址空间的对象提供本地代表
- 虚拟代理(Virtual Proxy):延迟高开销对象的创建直到真正需要时
- 保护代理(Protection Proxy):控制对原始对象的访问权限
- 智能引用(Smart Reference):在访问对象时执行额外操作(如引用计数)
提示:代理模式与装饰器模式在实现上很相似,但目的不同。装饰器模式关注的是动态添加功能,而代理模式关注的是控制访问。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. C++代理模式实现详解
2.1 基本类结构设计
一个标准的代理模式实现通常包含以下三个关键组件:
cpp复制// 抽象主题接口
class Subject {
public:
virtual void Request() const = 0;
virtual ~Subject() = default;
};
// 真实主题类
class RealSubject : public Subject {
public:
void Request() const override {
std::cout << "RealSubject: Handling actual request.\n";
}
};
// 代理类
class Proxy : public Subject {
private:
RealSubject* real_subject_;
bool CheckAccess() const {
std::cout << "Proxy: Checking access permissions...\n";
return true;
}
void LogAccess() const {
std::cout << "Proxy: Logging request time.\n";
}
public:
Proxy(RealSubject* real_subject) : real_subject_(new RealSubject(*real_subject)) {}
~Proxy() {
delete real_subject_;
}
void Request() const override {
if (this->CheckAccess()) {
this->real_subject_->Request();
this->LogAccess();
}
}
};
2.2 延迟初始化实现
虚拟代理的典型实现方式,可以显著提升系统性能:
cpp复制class LazyProxy : public Subject {
private:
mutable RealSubject* real_subject_;
mutable bool initialized_;
void Initialize() const {
if (!initialized_) {
std::cout << "Proxy: Lazy initializing real subject...\n";
real_subject_ = new RealSubject();
initialized_ = true;
}
}
public:
LazyProxy() : real_subject_(nullptr), initialized_(false) {}
~LazyProxy() {
if (initialized_) {
delete real_subject_;
}
}
void Request() const override {
Initialize();
real_subject_->Request();
}
};
3. 高级应用场景实现
3.1 线程安全代理实现
在多线程环境下,代理模式可以很好地处理线程安全问题:
cpp复制#include <mutex>
class
