C++代理模式

/**
    《代理模式》
    代理模式是一种结构型设计模式, 让你能够提供对象的替代品或其占位符。 
    代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。

    代理模式建议新建一个与原服务对象接口相同的代理类, 然后更新应用以将代理对象传递给所有原始对象客户端。 
    代理类接收到客户端请求后会创建实际的服务对象, 并将所有工作委派给它。

    如果需要在类的主要业务逻辑前后执行一些工作, 你无需修改类就能完成这项工作。 
    由于代理实现的接口与原类相同, 因此你可将其传递给任何一个使用实际服务对象的客户端。

    当你希望在无需修改客户代码的前提下于已有类的对象上增加额外行为时, 该模式是无可替代的。
 */

// 代理模式
#include 
#include 

// 真实的服务类接口
class ISubject
{
public:
    virtual void Request() = 0;
};

// 真实的服务类
class Subject : public ISubject
{
public:
    void Request() override
    {
        std::cout << "Subject: request." << std::endl;
    }
};


// 代理类——拥有和真实类同样的接口,所以要继承同样的接口
class Proxy : public ISubject
{
private:
    Subject *subject_;   // 因为要与真实服务类通信,所以使用组合

public:
    Proxy(Subject *subject) : subject_(new Subject(*subject))
    {

    }

    // 重写接口
    void Request() override
    {
        std::cout << "进行一些处理" << std::endl;
        this->subject_->Request();  // 处理完毕再调用真实的服务类函数
    }
};


int main()
{
    ISubject *isubject = new Proxy(nullptr);
    isubject->Request();
}

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