代理模式通过代理类控制对真实对象的访问,实现延迟加载、权限控制等功能;代理与真实对象实现同一接口,调用者无感知。

代理模式(Proxy Pattern)是一种结构型设计模式,它通过引入一个代理类来控制对真实对象的访问。在 C++ 中,代理模式常用于延迟初始化、权限控制、日志记录、远程调用等场景。代理类和真实对象实现相同的接口,这样调用者无法区分自己使用的是真实对象还是代理。
基本实现结构
要实现代理模式,需要定义一个公共接口,由真实对象和代理类共同实现。代理持有真实对象的指针或引用,在适当的时候转发请求。
// 公共接口
class Subject {
public:
virtual ~Subject() = default;
virtual void request() = 0;
};
// 真实对象
立即学习“C++免费学习笔记(深入)”;
class RealSubject : public Subject {
public:
void request() override {
std::cout
}
};
// 代理类
eSiteGroup站群管理系统是基于eFramework低代码开发平台构建,是一款高度灵活、可扩展的智能化站群管理解决方案,全面支持SQL Server、SQLite、MySQL、Oracle等主流数据库,适配企业级高并发、轻量级本地化、云端分布式等多种部署场景。通过可视化建模与模块化设计,系统可实现多站点的快速搭建、跨平台协同管理及数据智能分析,满足政府、企业、教育机构等组织对多站点统一管控的
class Proxy : public Subject {
private:
RealSubject* real_subject_;
void log_access() const {
std::cout
}
public:
explicit Proxy(RealSubject* rs) : real_subject_(rs) {}
~Proxy() { delete real_subject_; }
void request() override {
if (real_subject_ == nullptr) {
real_subject_ = new RealSubject();
}
log_access();
real_subject_->request();
}
};
使用示例:
int main() {
Proxy proxy(nullptr);
proxy.request(); // 输出:记录访问 + 真实处理
return 0;
}
常见应用场景
代理模式在实际开发中用途广泛,以下是一些典型用法:
- 虚代理(Virtual Proxy):延迟创建开销大的对象,比如图像加载、数据库连接。代理在首次调用时才创建真实对象。
- 保护代理(Protection Proxy):控制对敏感对象的访问权限。代理检查用户角色后再决定是否转发请求。
- 远程代理(Remote Proxy):代表位于其他地址空间的对象(如网络服务),本地代理负责通信细节。
- 智能指针(Smart Pointer):可看作一种代理,管理对象生命周期,附加引用计数、自动释放等功能。
- 日志或监控代理:在方法调用前后插入日志、性能统计等逻辑,不侵入原有代码。
改进与注意事项
上述实现可以进一步优化:
- 使用智能指针(如 std::unique_ptr 或 std::shared_ptr)管理真实对象,避免内存泄漏。
- 代理可缓存对象状态,减少重复操作。
- 多线程环境下需考虑加锁,防止竞态条件。
- 接口尽量保持简洁,避免代理过度复杂化。
例如,改用智能指针:
class Proxy {
private:
std::unique_ptr
public:
void request() override {
if (!real_subject_) {
real_subject_ = std::make_unique
}
std::cout
real_subject_->request();
}
};
总结
代理模式通过中间层控制对象访问,提升程序的灵活性和安全性。C++ 实现中,关键在于共享接口和职责分离。合理使用代理,能有效解耦调用者与真实逻辑,便于扩展功能如懒加载、权限校验、监控等。基本上就这些。










