设计模式12之c++代理模式(含示例代码)

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理,以控制对这个对象的访问。代理对象可以在不改变目标对象的情况下,增加额外的功能,比如安全检查、缓存等。


#include <iostream>
#include <string>
// 抽象主题
class Subject {
public:
    virtual void request() = 0;
};
// 具体主题
class RealSubject : public Subject {
public:
    void request() override {
        std::cout << "RealSubject: Handling request." << std::endl;
    }
};
// 代理
class Proxy : public Subject {
public:
    Proxy(Subject* real_subject) : real_subject_(real_subject) {}
    void request() override {
        if (checkAccess()) {
            real_subject_->request();
            logAccess();
        }
    }
private:
    bool checkAccess() {
        std::cout << "Proxy: Checking access prior to firing a real request." << std::endl;
        // 检查访问权限
        return true;
    }
    void logAccess() {
        std::cout << "Proxy: Logging the time of request." << std::endl;
        // 记录访问日志
    }
    Subject* real_subject_;
};
int main() {
    // 创建具体主题和代理
    Subject* real_subject = new RealSubject;
    Proxy* proxy = new Proxy(real_subject);
    // 通过代理访问具体主题
    proxy->request();
    // 释放内存
    delete real_subject;
    delete proxy;
    return 0;
}

在这个示例中,Subject 是抽象主题,定义了代理和具体主题的公共接口。RealSubject 是具体主题,实现了 request 方法来处理真正的请求。Proxy 是代理,它包含一个指向真正主题的指针,并实现了 request 方法来控制对真正主题的访问。在 request 方法中,代理首先通过 checkAccess 方法检查访问权限,然后调用真正主题的 request 方法,并最终通过 logAccess 方法记录访问日志。
优化:

在实现中,可以使用智能指针等技术来管理对象的生命周期,避免内存泄漏等问题。

在使用代理模式时,需要考虑代理和真正主题的接口一致性和兼容性,避免出现不兼容的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值