代理模式
代理模式属于结构型模式。
定义:
代理即一个类代表另一个类的功能。
比如篮球运动员通过经纪人与老板谈薪,那么经纪人就是篮球运动员的代理。
在代理模式中,通过创建一个具有需要代理对象的代理,以便向外界提供需要的功能。
加深理解:
在某些情况下,一个类对象不适合或者不能直接引用另一个类对象,
所以可以交给代理类去完成这个中介的作用,是不是感觉和中介模式有点像。
其实中介模式和代理模式概念是比较接近,但是实际实现却是不同的。
假设有A、B、C三个类,A与B想交流,但是A却因为某种原因,不能直接和B交流
所以需要通过C来代理,而C这个代理其实只封装了A的对象。相当于C就是A的全权代表了。
这个就是代理模式。
中介模式呢,A、B想交流,但是需要通过C来牵线,在C这个类中,封装了A与B的对象。
而代理模式C只封装了A,这就是中介模式和代理模式的不同点。
在现实中,中介模式和买房卖房很像,代理模式和律师帮忙打官司很像。
类图:
应用场景:
现在苹果公司需要生产AirPods耳机,委托立讯精密代理生产。
代码:
#include <iostream>
using namespace std;
//抽象工厂
class IFactory
{
public:
virtual ~IFactory() {}
virtual void createProduct() = 0;
};
//苹果AirPods耳机工厂
class AppleAirpodsFactory :public IFactory
{
public:
void createProduct()
{
cout << "生产苹果AirPods耳机" << endl;
}
};
//立讯精密公司代理生产
class ILXCompanyProxy :public IFactory
{
public:
ILXCompanyProxy(IFactory* f) :m_factory(nullptr)
{
m_factory = f;
}
void createProduct()
{
cout << "立讯精密代理:" << endl;
m_factory->createProduct();
}
private:
IFactory* m_factory;
};
//客户端
int main()
{
IFactory* factory = new AppleAirpodsFactory;
ILXCompanyProxy* proxy = new ILXCompanyProxy(factory);
proxy->createProduct();
if (factory) delete factory;
if (proxy) delete proxy;
getchar();
return 0;
}
输出: