当前位置: 首页 > article >正文

代理模式演示(C++)三分钟读懂

代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。代理通常充当客户端和实际对象之间的中介,可以在访问实际对象之前或之后执行额外的操作。

下面是一个使用C++和Qt框架演示代理模式的示例:

演示代码:

#include <QCoreApplication>
#include <QDebug>

// 抽象主题类
class Subject {
public:
    // 纯虚函数
    virtual void request() = 0;
};

// 具体主题类
class RealSubject : public Subject {
public:
    void request() override {
        qDebug() << "RealSubject:处理请求";
    }
};

// 代理类 继承抽象主题类
class Proxy : public Subject {
private:
    RealSubject* realSubject;

public:
    // 创建具体主题类对象
    Proxy() : realSubject(new RealSubject) {}

    // 重写抽象主题类函数,在里面可以做一些关于具体主题类的操作
    void request() override {
        // 在访问实际对象之前或之后可以执行额外的操作
        qDebug() << "Proxy: Logging request.";
        realSubject->request();
        qDebug() << "Proxy: Request handled.";
    }
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    Proxy proxy;
    proxy.request();

    return a.exec();
}

在这个示例中,我们定义了一个抽象主题类Subject,具体主题类RealSubject实现了抽象主题类的方法。Proxy类充当代理,内部持有一个RealSubject对象,并在访问RealSubject之前或之后执行额外的操作。

main函数中,我们创建了一个Proxy对象,并调用其request方法来处理请求。代理在处理请求时会先执行日志记录操作,然后将请求转发给实际的主题对象RealSubject进行处理。

代理模式的优点:

  1. 远程代理(Remote Proxy): 可以通过代理对象在不同地址空间中代表实际对象,使得客户端可以访问远程对象。

  2. 虚拟代理(Virtual Proxy): 可以延迟实际对象的创建和初始化,提高系统性能。

  3. 保护代理(Protection Proxy): 可以控制对实际对象的访问权限,实现安全性控制。

  4. 简化客户端: 代理模式可以隐藏实际对象的复杂性,使客户端代码更简洁。

代理模式的缺点:

  1. 增加复杂性: 引入代理对象会增加系统的复杂性,特别是当存在多层代理时。

  2. 性能损失: 由于代理对象的存在,可能会引入额外的开销,影响系统性能。

  3. 过度使用: 如果过度使用代理模式,可能会导致系统中存在过多的代理对象,使得系统变得难以维护和理解。

代理模式适用于需要控制对对象的访问、延迟加载、权限控制等情况。在使用代理模式时,需要根据具体的需求来选择合适的代理类型,并确保代理对象的引入不会引起系统的复杂性和性能问题。


http://www.kler.cn/news/359692.html

相关文章:

  • 东芝TLP176AM光耦合器:提升设计性能的关键元件
  • 顺序表逆置相关的算法题|整体逆置|两个顺序表互换位置|轮转数组(C)
  • 使用网络爬虫爬取豆瓣电影网站的数据
  • Kimi AI助手重大更新:语音通话功能闪亮登场!
  • AI大模型是否有助于攻克重大疾病?
  • 数据仓库宽表概述
  • 作用域的类型与注意事项
  • SVM算法
  • VSCode编译器改为中文
  • html全局属性、框架标签
  • npm 加速,命令行修改国内镜像源【附带国内最新几个镜像】超简约版~
  • 最佳副屏串流解决方案:如何低成本打造电脑拓展副屏?
  • HTml + CSS 核心笔记 (八)
  • 【C++刷题】力扣-#119-杨辉三角II
  • MySQL备份和还原,用mysqldump、mysql和source命令来完成
  • React中的Hooks钩子
  • Node + HTML搭建自己的ChatGPT [基础版]
  • 农合生活平台用户量已突破5万人大关。
  • vue中this.$nextTick()方法
  • Prometheus 抓取 nginx 访问日志的指标