解释说明:
main(),西门庆
IKindWomen,接口
CWangPo,代理
CPanJinLian,实际执行者之一
CJiaShi,实际执行者之二
看起来代理模式的结构和策略模式类似,都是由一个类来装载接口的一个实例,策略模式是CContext来装载,代理模式是CWangPo来装载。CContext不是从IStrategy派生,所以不需要实现IStrategy接口函数,而CWangPo是从IKindWomen派生的所以CWangPo很清楚CPanJinLian和CJiaShi的接口函数。这就是代理,代理人知道被代理人能干的事情即函数,所以代理人可以成为中介。所谓代理,真实的执行者在代理的后面。
代理和实际执行者派生于共同的接口,代理拥有实际执行者的实例。代理的每一个函数(接口的实现函数),直接调用实际执行者的对应接口函数。
注意:代理只是简单的装载,然后调用实际执行者的函数
代理和实际执行者派生于共同的接口
#include <iostream>
using namespace std;
//
class IKindWomen
{
public:
IKindWomen(){};
virtual ~IKindWomen(){};
virtual void MakeEyesWithMan() = 0;
virtual void HappyWithMan() = 0;
};
//实际执行者的代理者
class WangPo :public IKindWomen
{
public:
WangPo(IKindWomen* pKindwomen)
{
this->m_kindwomen = pKindwomen;
}
~WangPo()
{
delete this->m_kindwomen;
}
void HappyWithMan()
{
this->m_kindwomen->HappyWithMan();
}
void MakeEyesWithMan()
{
this->m_kindwomen->MakeEyesWithMan();
}
private:
IKindWomen* m_kindwomen;
};
//实际执行者Panjinlian
class PanJinLian :public IKindWomen
{
public:
PanJinLian(){}
~PanJinLian(){}
void HappyWithMan()
{
cout << "潘金莲和那个男人做..." << endl;
}
void MakeEyesWithMan()
{
cout << "潘抛媚眼" << endl;
}
};
//实际执行者jiashi
class JiaShi :public IKindWomen
{
public:
JiaShi(){}
~JiaShi(){}
void HappyWithMan()
{
cout << "驾驶和那个男人做..." << endl;
}
void MakeEyesWithMan()
{
cout << "家私抛媚眼" << endl;
}
};
class Jiashi
{
};
//测试
void doPanjinlian()
{
WangPo* WangePo;
WangePo = new WangPo(new PanJinLian);
WangePo->MakeEyesWithMan();
WangePo->HappyWithMan();
delete WangePo;
}
void doJiashi()
{
WangPo* pWangPo;
pWangPo = new WangPo(new JiaShi);
pWangPo->MakeEyesWithMan();
pWangPo->HappyWithMan();
delete pWangPo;
}
int main()
{
doPanjinlian();
doJiashi();
return 0;
}