代理模式,那么什么是代理模式勒,我们可以这样来理解,我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道
被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被
代理的人能干活呀。说起来很抽象,具体看实例还是来的实在!
比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的:
先定义一种类型的女人
class KindWomen //指示这一类女人,王婆和潘金莲都属于这种女人
{
public:
virtual void HappyWithMan() = 0; //和男人开心,你懂的,王婆和潘金莲都会
virtual void MakeEyesWithMan() = 0; //给男人抛媚眼,王婆和潘金莲都会抛
};
//潘金莲出场
class Panjinlian:public KindWomen
{
public:
virtual void HappyWithMan()
{
cout<<"潘金莲和男人开心.........."<<endl;
}
virtual void MakeEyesWithMan()
{
cout<<"潘金莲给男人抛媚眼."<<endl;
}
};
//王婆出场
class WangPo:public KindWomen
{
private:
KindWomen *kindWomen;
public:
virtual void HappyWithMan() //王婆自知老了,happy不动了,所以叫别人去干
{
kindWomen->HappyWithMan();
}
virtual void MakeEyesWithMan() //王婆这么丑抛媚眼谁看啊,所以她又喊别人去抛
{
kindWomen->MakeEyesWithMan();
}
WangPo(KindWomen *m_pKindWomen) //设置王婆到底代理的是谁,王婆开始构造
{
this->kindWomen = m_pKindWomen;
}
};
//西门庆控制主函数
int main()
{
//西门庆看上了潘金莲,但是潘金莲害羞啊,也不敢去抛媚眼,所以这时候就需要王婆帮他做一些事撒
WangPo wangpo = new WangPo(new Panjinlian() ); //王婆出场,代理的是潘金莲
wangpo.MakeEyesWithMan(); //王婆开始抛媚眼,但是实际上是潘金莲在抛媚眼
wangpo.HappyWithMan(); //王婆开始和男人happy..... 实际上王婆哪能和男人开心,幕后是潘金莲在happy
system("pause");
return 0;
}
假如到现在还有个卢俊义他老婆也想和西门庆玩玩,那么他也可以找到王婆做代理人,同样继承了抽象类并实现方法,传递给王婆就可以做代理了,有的时候如果需要代理的对象过多,也可以结合享元模式使用,享元模式以后再说
总结一下:代理模式就是利用接口和多态来实现,对需要代理的人进行了浅封装,直接出面做事的人是代理人,但是实际上在做的是被代理的人