C++怎么实现一个代理设计模式_C++结构型模式与Proxy Pattern应用

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

C++怎么实现一个代理设计模式_C++结构型模式与Proxy Pattern应用-第1张图片-佛山资讯网

代理模式(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

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~