GeekBand C++面向?qū)ο蟾呒壘幊蹋ㄉ希ǖ谌埽涸O(shè)計

第三周介紹了繼承多態(tài),然后利用一些設(shè)計方法說明了封裝。一來考慮到后續(xù)的課程《設(shè)計模式》,二來此時的理解還很粗糙,暫且壓下。需要補充的要點:1.復(fù)合于委托;2.原型設(shè)計;3.Method template

1.關(guān)于委托#

委托是對一個類的功能進行擴展和復(fù)用的方法。它的做法是:寫一個附加的類提供附加的功能,并使用原來的類的實例提供原有的功能

從某種意義上來說,它和繼承相似,都可以使用其他的類的功能。不過不同的,繼承往往必須在邏輯上存在固定的關(guān)系,不如委托靈活。

委托是一種模式,委托者不完成實際的工作,也不關(guān)心完成工作的細節(jié),但有完成工作的接口,這個接口只是將請求發(fā)給被委托者來完成。下面用一個最基本的例子來說明這個問題:
Demo_01

//MyString 是委托類,String是被委托類
class  MyString
 {
     public:
         MyString();
         ~MyString();
         void MyInsert(char ch,int pos);
      
      public:
         void MyUniqFun(void);
     private:
         String *m_pstr;
   };

  MyString::MyString()
  {
     m_pstr=new String;
   }

   MyString::~MyString()
  {
     delete m_pstr;
   }
   
   void MyString::MyInsert(char ch,int pos)
   {
        m_pstr->insert(ch,pos);     //委托,把插入功能委托給String實現(xiàn),MyString只提供接口 
   }

   
  void MyUniqFun(void)
{
  //此處可自由發(fā)揮,實現(xiàn)該類的獨特功能
}

2.關(guān)于原型

原型模式:用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。

創(chuàng)建一個原型的虛基類,聲明一個拷貝自身的接口,然后根據(jù)子類的具體原型類,利用拷貝構(gòu)造函數(shù)實現(xiàn)自身的拷貝操作。
下面是源于《大話設(shè)計模式》書中一份代碼說明:
Demo_02

  #include <cstdio>  
  
//接口  
class CPrototype  
{  
public:  
    CPrototype(){}  
    virtual ~CPrototype(){}  
  
    virtual CPrototype* Clone() = 0;  
};  
  
//實現(xiàn)  
class CConcretePrototype : public CPrototype  
{  
public:  
    CConcretePrototype():m_counter(0){}  
    virtual ~CConcretePrototype(){}  
  
    //拷貝構(gòu)造函數(shù)  
    CConcretePrototype(const CConcretePrototype& rhs)  
    {  
        m_counter = rhs.m_counter;  
    }  
  
    //復(fù)制自身  
    virtual CPrototype* Clone()  
    {  
        //調(diào)用拷貝構(gòu)造函數(shù)  
        return new CConcretePrototype(*this);  
    }  
  
private:  
    int m_counter;  
};  
  
int main(int argc, char **argv)  
{  
    //生成對像  
    CPrototype* conProA = new CConcretePrototype();  
    //復(fù)制自身  
    CPrototype* conProB = conProA->Clone();  
  
    delete conProA; conProA=NULL;  
    delete conProB; conProB=NULL;  
  
    return 0;  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容