ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2024 All rights reserved.

代理模式——大话设计模式读书笔记

来一发代理模式。顾名思义代理模式就是找了一个中介来帮我们完成要做的操作,就像我们租房子的时候有时会选择一个中介一样。

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

下面是代理模式的UML图:

代理模式

将上面的UML图转换成C++代码,如下:

/*
* initm.com
* 作者:Stupid
* 时间:2017-10-19 21:36
* 描述: 代码使用QT5.9+MinGW53_32编译通过,代码为代理模式的基本结构代码。
*/
#include <iostream>

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

class RealSubject : public Subject
{
public:
    virtual void Request() override final{
        std::cout << "RealSubject was called" << std::endl;
    }
};

class Proxy : public Subject
{
private:
    RealSubject* realSubject;
public:
    Proxy(): realSubject(){}

    virtual void Request() override final{
        if(nullptr == realSubject){
            realSubject = new RealSubject;
        }
        realSubject->Request();
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Proxy* proxy;
    proxy = new Proxy;
    proxy->Request();

    return a.exec();
}

从代码中可以看出,我们通过Proxy类的Request成员函数,就直接调用了RealSubject类中的Request成员函数,Proxy就是一个中介。

可能有人觉得这和装饰模式有一点点类似啊。的确,我刚看到这也这么觉得。

但后来想想,装饰模式中,在main函数中原始的类对我们是可见的,我们通过装饰类为原来的类增加了功能。

而代理模式中,原来的类对main函数来说是不可见的;再代理的实际功能是真正的RealSubject类来实现的。

代码手打的,如果出现问题欢迎大家留言指正。

2017-10-19
                         
暂无评论

发表回复