天天看點

建造者模式介紹實作

介紹

例如建造小人,一共需建造6個部分,頭部、身體、左右手、左右腳。與工廠模式不同,建造者模式是在導向者的控制下(傳入參數)一步一步構造出不同的産品(但是内部建造順序都是穩定的)。當我們要建立的對象很複雜的時候(通常是由很多其他的對象組合而成),我們要複雜對象的建立過程和這個對象的表示(展示)分離開來,這樣做的好處就是通過一步步的進行複雜對象的建構, 由于在每一步的構造過程中

可以引入參數,使得經過相同的步驟建立最後得到的對象的展示不一樣。這就是建造者模式。

實作

/*
純虛函數,定義接口
*/
class Builder
{
public:
    virtual void BuildHead() = ;
    virtual void BuildBody() = ;
    virtual void BuildLeftArm()= ;
    virtual void BuildRightArm() = ;
    virtual void BuildLeftLeg() = ;
    virtual void BuildRightLeg() = ;
};
/*
構造瘦人
*/
class ThinBuilder : public Builder
{
public:
    void BuildHead() { cout<<"build thin body"<<endl; }
    void BuildBody() { cout<<"build thin head"<<endl; }
    void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
    void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
    void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
    void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
};

/*
 * 構造胖人,和瘦人步驟一樣,但是内容不同,防止客戶程式調用複雜或者過程丢失。直接
 * 建立一個director執行相同的構造過程。
*/
class FatBuilder : public Builder
{
public:
    void BuildHead() { cout<<"build fat body"<<endl; }
    void BuildBody() { cout<<"build fat head"<<endl; }
    void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
    void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
    void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
    void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
};
/*
 * 指揮官,建造者模式,構造複雜對象
 */
class Director
{
private:
    Builder *m_pBuilder;//實作多态哦,動态綁定
public:
    Director(Builder *builder) {
        m_pBuilder = builder;
    }//構造函數
    void Create(){//構造
        m_pBuilder->BuildHead();
        m_pBuilder->BuildBody();
        m_pBuilder->BuildLeftArm();
        m_pBuilder->BuildRightArm();
        m_pBuilder->BuildLeftLeg();
        m_pBuilder->BuildRightLeg();
    }
};

int main(void){

    //Singleton *s1 = Singleton::GetInstance();
    //Singleton *s2 = Singleton::GetInstance();//靜态可以直接擷取,系統最後會自動調用析構函數
    ThinBuilder thinperson;//聲明類
    FatBuilder fatperson;//聲明類

    Director(&thinperson).Create();//利用多态将多個調用簡化了到create中
    Director(&fatperson).Create();//将多個調用簡化了

    return ;
}
           
建造者模式介紹實作

模式在于簡化相同數量函數的調用。

繼續閱讀