顾名思义,代理模式就是给一个类寻找一个代理类,对其暴露在外的方法进行一定的限制。比如,我们在外找房子的时候通常需要找一个代理(中介),委托中介与房东打交道从而进行房租的租赁等活动。这个代理就可以规避一些我们所不关注的东西,比如这个房子的房主是谁,是通过什么渠1道买的等,这些信息实际上对我们而言可有可无。
1. 代理模式
如上图所示,Proxy类作为landloard类的代理类,可以代表房东与房客进行商谈,从而隐藏一些信息。在下面的代码中,我们就隐藏了房东对房子的一些隐私信息(info函数中的内容),但是通过中介包装之后,顾客显然就无从得知这些信息了。
#include <iostream>
#include <string>
using namespace std;
class People{
public:
virtual void show()=0;
};
class Landlord:public People{
public:
void show(){
cout << "我是房主" << endl;
}
void info(){
cout << "这是房子的隐私信息,但是我不想告诉你" << endl;
}
};
class Proxy:public People{
private:
Landlord* landloard;
public:
void show(){
if(!landloard){
landloard = new Landlord();
}
cout << "我是中间商,我代表房主与你谈判" << endl;
landloard->show();
}
};
int main(){
Proxy* proxy = new Proxy();
proxy->show();
return 0;
}
下面是运行结果:
2. 代理模式与适配器模式
从上面的代码中不难得知代理模式和适配器模式很相似,但是它们有着本质的区别。适配器模式为了将两个类的接口进行整合,从而保证接口一致从而进行通信;而代理模式主要是给为了给现有的类进行封装,但是并不改变其暴露在外的接口。