代理模式演示(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. 过度使用: 如果过度使用代理模式,可能会导致系统中存在过多的代理对象,使得系统变得难以维护和理解。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值