代理模式通过引入代理类实现对真实对象的间接访问,控制其调用时机或权限。示例中ProxyImage在display时才加载RealImage,实现延迟初始化;不同代理类型包括远程、保护、日志代理等,C++中还可结合智能指针增强资源管理,符合开闭原则,适用于延迟加载、权限控制、远程调用等场景。

代理模式(Proxy Pattern)是C++中常用的结构型设计模式之一,它为其他对象提供一种间接访问方式,以控制对原对象的访问。这种模式在需要延迟加载、权限控制、日志记录或远程调用等场景中非常有用。
代理模式的基本结构
代理模式的核心在于引入一个代理类,该类与真实对象实现相同的接口,从而可以在不改变客户端代码的前提下,插入额外逻辑。
主要角色包括:
- Subject(抽象主题):定义真实对象和代理对象的公共接口。
- RealSubject(真实主题):真正执行业务逻辑的对象。
- Proxy(代理类):持有对真实对象的引用,控制对其的访问。
以下是一个简单的C++实现示例:
立即学习“C++免费学习笔记(深入)”;
#include <iostream>
#include <memory>
// 抽象接口
class Image {
public:
virtual ~Image() = default;
virtual void display() = 0;
};
// 真实对象
class RealImage : public Image {
private:
std::string filename;
void loadFromDisk() {
std::cout << "Loading image: " << filename << "\n";
}
public:
explicit RealImage(const std::string& file) : filename(file) {
loadFromDisk();
}
void display() override {
std::cout << "Displaying image: " << filename << "\n";
}
};
// 代理对象
class ProxyImage : public Image {
private:
std::string filename;
std::unique_ptr<RealImage> realImage;
public:
explicit ProxyImage(const std::string& file) : filename(file), realImage(nullptr) {}
void display() override {
if (!realImage) {
realImage = std::make_unique<RealImage>(filename);
}
realImage->display();
}
};
登录后复制
使用代理实现延迟加载
上面的例子展示了虚拟代理的一种典型应用——延迟初始化。图片只有在真正需要显示时才被加载,节省了初始资源开销。
客户端代码无需关心是否通过代理访问:
标签: access ai c++ proxy ios stream 延迟加载 red
还木有评论哦,快来抢沙发吧~