程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 設計模式之Proxy模式(C++實現)

設計模式之Proxy模式(C++實現)

編輯:C++入門知識

代理模式,那麼什麼是代理模式勒,我們可以這樣來理解,我很忙,忙的沒空理你,那你要找我呢就先找我的代理人吧,那代理人總要知道
被代理人能做哪些事情不能做哪些事情吧,那就是兩個人具備同一個接口,代理人雖然不能干活,但是被
代理的人能干活呀。說起來很抽象,具體看實例還是來的實在!

 

比如西門慶找潘金蓮,那潘金蓮不好意思答復呀,咋辦,找那個王婆做代理,表現在程序上時這樣的:
先定義一種類型的女人

[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;
}
假如到現在還有個盧俊義他老婆也想和西門慶玩玩,那麼他也可以找到王婆做代理人,同樣繼承了抽象類並實現方法,傳遞給王婆就可以做代理了,有的時候如果需要代理的對象過多,也可以結合享元模式使用,享元模式以後再說

 

總結一下:代理模式就是利用接口和多態來實現,對需要代理的人進行了淺封裝,直接出面做事的人是代理人,但是實際上在做的是被代理的人


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved