對象建立型模式------Builder(生成器)

本文系轉載,轉載地址http://blog.sina.com.cn/s/blog_59b6af690100zj3l.html,只供本身學習使用。html

假設如今有三種產品,是玩具,都是由三部分組成,頭,身體,和腳丫,
如今要實現生產不一樣組合產品的功能,例如
第一種產品是紅頭,綠身體,黑腳
第二種產品是綠頭,黑身體,紅腳
第三種產品是黑頭,紅身體,綠腳丫
如今現寫一個build基類,web

class  builder
{
public:
    virtual void buildpartHead(const char* str="pre-define")=0;
    virtual void buildpartBody(const char* str="pre-define")=0;
    virtual void buildpartFoot(const char* str="pre-define")=0;
};

具體實現類:第一種產品各個零部件的生產學習

class builder_Kindone:public builder
{
public:
    builder_Kindone(){cout<<"kindone is creating.......\n";}
    void buildpartHead(const char* str="red.")
    {
        first->setcolor_Head("red.head");
    }
    void buildpartBody(const char* str="blue.")
    {
        first->setcolor_Body("green.body");
    }
    void buildpartFoot(const char* str="black.")
    {
        first->setcolor_Foot("black.foot");
    }

    productFirst* GetProduct()
    {
        // buildpartHead();buildpartBody();buildpartFoot();
        return  first;
    }
private:
    productFirst* first;
};

第二種產品各個零部件的生產ui

class builder_Kindtwo:public builder
{
public:
    builder_Kindtwo(){cout<<"kindtwo is creating.......\n";}
    void buildpartHead(const char* str="green")
    {
        second->setcolor_Head("green.head");
    }
    void buildpartBody(const char* str="black")
    {
        second->setcolor_Body("black.body");
    }
    void buildpartFoot(const char* str="red")
    {
        second->setcolor_Foot("red.foot");
    }

    productSecond* GetProduct()
    {   //buildpartHead();buildpartBody();buildpartFoot();
        return  second;
    }
private:
    productSecond* second;
};

如今來看看產品類 第一種產品,包括三個部件spa

class productFirst
{
public:
    void setcolor_Head(const char* str="red.head")
    {
        cout<<"head's color is.\t"<<str<<endl;
    }
    void setcolor_Body(const char* str="blue.body")
    {
        cout<<"body's color is.\t"<<str<<endl;
    }
    void setcolor_Foot(const char* str="black.foot")
    {
        cout<<"foot's color is.\t"<<str<<endl;
    }
private:
    char* color;
    //Head head;Body body;Foot foot;
};

第二種產品,也是包括三個部件設計

class productSecond
{
public:
    void setcolor_Head(const char* str)
    {
        cout<<"head's color is.\t"<<str<<endl;
    }
    void setcolor_Body(const char* str)
    {
        cout<<"body's color is.\t"<<str<<endl;
    }
    void setcolor_Foot(const char* str)
    {
        cout<<"foot's color is.\t"<<str<<endl;
    }
private:
    //Head head;Body body;Foot foot;
};

組裝類direct類code

class direct
{
public:
    void construct(builder* b)
    {
        b->buildpartHead();
        b->buildpartBody();
        b->buildpartFoot();
        cout<<"making all parts together......\n"<<endl;
    }
};

客戶端的使用orm

builder_Kindtwo* pf = new builder_Kindtwo();
    direct d;
    d.construct(pf);
    productSecond* f = pf->GetProduct();

一個複雜對象是由多個部件組成的,Builder模式是把複雜對象的建立和部件的建立分別開來,分別用Builder類和Director類來表示.用Director構建最後的複雜對象,而在上面Builder接口中封裝的是如何建立一個個部件(複雜對象是由這些部件組成的),也就是說Director的內容是如何將部件最後組裝成成品:htm


通俗講解:Builder模式的理解
簡單地說,就好象我要一座房子住,但是我不知道怎麼蓋 (簡單的砌牆,層次較低),也不知道怎麼樣設計(建幾個房間,幾個門好看,層次較高), 因而我須要找一幫民工,他們會砌牆,還得找個設計師,他知道怎麼設計,我還要確保民工聽設計師的領導,而設計師自己也不幹活,光是下命令,這裏砌一堵牆, 這裏砌一扇門,這樣民工開始建設,最後,我能夠向民工要房子了。在這個過程當中,設計師是什麼也沒有,除了他在腦子裏的設計和命令,因此要房子也是跟民工 要,記住了!
就象國內好多企業上erp同樣,上erp,首先得找軟件公司呀,找到軟件公司後,軟件公司說,我只知道怎麼寫軟件,就知道怎 麼實現,不清楚整個erp的流程。好,那咱們還得找一個諮詢公司,好,找到德勤了,德勤說好,我要軟件怎麼作,軟件公司怎麼作,我就能保證軟件能爲大家提 供erp系統了。此模式是爲了讓設計和施工解耦,互不干擾。對象

相關文章
相關標籤/搜索