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

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


#include 
#include 
// 抽象主题
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 方法记录访问日志。
优化:

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

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

你可能感兴趣的:(设计模式,代理模式,设计模式,c++)