2. 代理模式(C++)

1.介绍

代理模式:为其他对象提供一种代理以控制对这个对象的访问。这样实现了业务和核心功能分离。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理模式的优点:1.职责清晰;2.易扩展;3.减低耦合,可以保护目标对象。
代理模式的缺点:1.由于在客户端和真实对象之间增加了代理对象,因此可能会造成额外的开销或者请求处理速度变慢;2.实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

代理模式其实只是加强了对接口的管理,并不是为了修改或则增强接口功能,这是和适配器模式、装饰模式的主要区别。

2. UML

简单的UML图可以表示如下:

  • Subject(抽象主题):声明了 RealSubject 与 Proxy 的共同接口;
  • RealSubject(真实主题):执行具体的业务逻辑,Proxy 控制对它的访问;
  • Proxy(代理):持有一个 RealSubject 引用(指针),可以在需要时将请求转发给 RealSubject,以此起到代理的作用;
  • Client(客户端):调用方。

3. 实现

一个简单的实现:

#include <iostream>
#include <memory>

class Subject {
public:
    virtual ~Subject() {}
    virtual void Request() = 0;
};

class RealSubject: public Subject{
public:
    void Request() {
        std::cout << "RealSubject::Request()..." << std::endl;
    }
};

class Proxy: public Subject{
public:
    Proxy(std::shared_ptr<Subject> subject): subject_(subject) {}
    ~Proxy() {}
    void Request() {
        std::cout << "Proxy::Request()..." << std::endl;
        if(subject_) {
            subject_->Request();
        } else {
            std::cout << "Invalid real subject!" << std::endl;
        }
    }
private:
    std::shared_ptr<Subject> subject_;
};

int main() {
    Proxy proxy(std::make_shared<RealSubject>());
    proxy.Request();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/xl2432/p/10121517.html