代理模式核心是通过代理类控制对真实对象的访问,不改变原接口即可添加权限校验、日志等逻辑;其结构含抽象接口、真实对象和代理对象三部分,代理持真实对象引用并转发调用。

代理模式在C++中核心是用一个代理类(Proxy)控制对真实对象(RealSubject)的访问,既不改变原接口,又能添加权限校验、延迟加载、日志记录等额外逻辑。
一、代理模式的基本结构
需要三部分协同工作:
- 抽象接口(Subject):定义业务方法,供 Proxy 和 RealSubject 共同实现;
- 真实对象(RealSubject):真正执行业务逻辑的类;
- 代理对象(Proxy):持有一个 RealSubject 指针/引用,转发调用,并在前后插入控制逻辑。
二、经典静态代理实现(以文件读取为例)
假设我们想对文件读取操作加访问日志和权限检查:
class FileReader {
public:
virtual ~FileReader() = default;
virtual std::string read(const std::string& path) = 0;
};
class RealFileReader : public FileReader {
public:
std::string read(const std::string& path) override {
return "Content from " + path; // 真实读取逻辑
}
};
class LoggingProxy : public FileReader {
private:
std::unique_ptr<RealFileReader> real_reader;
public:
LoggingProxy() : real_reader(std::make_unique<RealFileReader>()) {}
std::string read(const std::string& path) override {
std::cout << "[LOG] Accessing file: " << path << std::endl;
// 可在此加权限判断:if (!hasPermission(path)) throw std::runtime_error("No access");
return real_reader->read(path);
}
};登录后复制
使用时只需面向 FileReader 接口编程:
立即学习“C++免费学习笔记(深入)”;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~