大话设计模式之代理模式

代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。代理对象充当客户端和实际对象之间的中介,客户端通过代理对象间接访问实际对象,从而可以在访问控制、缓存、延迟加载等方面提供额外的功能。

在代理模式中,通常会有三种角色:

  1. Subject(抽象主题):声明了真实对象和代理对象的共同接口,这样在任何使用真实对象的地方都可以使用代理对象。

  2. RealSubject(真实主题):定义了代理对象所代表的真实对象,是最终需要访问的对象。

  3. Proxy(代理):保存一个指向真实主题的引用,并提供与真实主题相同的接口,同时可以在调用真实主题之前或之后执行额外的操作。

cpp 复制代码
#include <iostream>

// Subject(抽象主题)
class Image {
public:
    virtual void display() = 0;
};

// RealSubject(真实主题)
class RealImage : public Image {
private:
    std::string filename;

public:
    RealImage(const std::string& filename) : filename(filename) {}

    void display() override {
        std::cout << "Displaying " << filename << std::endl;
    }
};

// Proxy(代理)
class ImageProxy : public Image {
private:
    RealImage* realImage;
    std::string filename;

public:
    ImageProxy(const std::string& filename) : filename(filename), realImage(nullptr) {}

    void display() override {
        if (!realImage) {
            realImage = new RealImage(filename);
        }
        realImage->display();
    }
};

int main(int argc, char *argv[])
{
    // 使用代理对象显示图片
    Image* image = new ImageProxy("example.jpg");
    image->display();

    delete image;

    return 0;
}

/*
在这个示例中,Image 是抽象主题,RealImage 是真实主题,ImageProxy 是代理。代理对象 ImageProxy 在调用 display() 方法时会首先判断是否已经创建了真实对象 RealImage,如果没有,则创建并显示;如果已经存在,则直接显示真实对象的内容。这样可以实现延迟加载真实对象的功能。

通过代理模式,我们可以在不改变原有类结构的情况下,增强对真实对象的控制,实现额外的功能,如访问控制、缓存等。

*/

觉得有帮助的话,打赏一下呗。。

相关推荐
Tisfy6 天前
LeetCode 3665.统计镜子反射路径数目:三个动态规划数组
leetcode·动态规划·代理模式·题解
geovindu7 天前
rust: Semaphore Pattern
开发语言·后端·设计模式·rust·代理模式·企业级信号量模式·同步型模式
一切皆是因缘际会8 天前
最优 控制
代理模式
\光辉岁月/13 天前
3.spring5-AOP
spring·代理模式·aop·spring5
AI_Cloud_推荐18 天前
DeepSeek-V4-Pro 的 4.5 和 12:不是加价,是同名不同版本
阿里云·语言模型·代理模式·ai编程·百度云
devilnumber22 天前
Java 代理模式(简单理解回顾)
java·开发语言·代理模式
驭渊的小故事24 天前
软件工程概念篇:需求、开发模型与测试模型全解析
人工智能·代理模式
king135987455024 天前
Gemini 4 Argon API 接入与迁移:模型参数、Token 价格和 Agent 测试方案
大模型·代理模式·ai agent·gemini
YumiProxy1 个月前
代理IP自动切换避坑指南:会话保持、请求头与错误处理实战
网络·网络协议·tcp/ip·代理模式·ip
-dzk-1 个月前
【动态规划】LC 416.分割等和子集
算法·动态规划·代理模式