设计模式(5)---代理模式

  代理模式:为其他对象提供一种代理以控制对这个对象的访问。

#include "stdafx.h"
#include <memory>
#include <iostream>

using namespace std;

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

class RealSubject : public Subject
{
public:
    virtual void Request(void)
    {
        cout << "This is real request." << endl;
    }
};

class Proxy : public Subject
{
public:
    virtual void Request(void)
    {
        if (nullptr == subject_)
        {
            subject_ = make_shared<RealSubject>();
        }
        subject_->Request();
    }
private:
    shared_ptr<Subject> subject_;

};

int main()
{
    shared_ptr<Subject> obj = make_shared<Proxy>();
    obj->Request();
    return 0;
}

  代理模式使用的场合:

1、远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实

2、虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象

3、安全代理,用来控制真实对象访问时的权限

4、智能指引,是指当调用真实的对象时,代理处理另外一些事。

原文地址:https://www.cnblogs.com/cauchy007/p/5347605.html