代理模式,那麼什麼是代理模式勒,我們可以這樣來理解,我很忙,忙的沒空理你,那你要找我呢就先找我的代理人吧,那代理人總要知道
被代理人能做哪些事情不能做哪些事情吧,那就是兩個人具備同一個接口,代理人雖然不能干活,但是被
代理的人能干活呀。說起來很抽象,具體看實例還是來的實在!
比如西門慶找潘金蓮,那潘金蓮不好意思答復呀,咋辦,找那個王婆做代理,表現在程序上時這樣的:
先定義一種類型的女人
[cpp]
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;
}
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;
}
假如到現在還有個盧俊義他老婆也想和西門慶玩玩,那麼他也可以找到王婆做代理人,同樣繼承了抽象類並實現方法,傳遞給王婆就可以做代理了,有的時候如果需要代理的對象過多,也可以結合享元模式使用,享元模式以後再說
總結一下:代理模式就是利用接口和多態來實現,對需要代理的人進行了淺封裝,直接出面做事的人是代理人,但是實際上在做的是被代理的人