来一发代理模式。顾名思义代理模式就是找了一个中介来帮我们完成要做的操作,就像我们租房子的时候有时会选择一个中介一样。
代理模式(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类来实现的。
代码手打的,如果出现问题欢迎大家留言指正。