《每日編程》----《設計模式》----《二》----builder模式

趁熱打鐵,繼續第二篇文章,十一前多學多寫。


原文地址:http://blog.csdn.net/lengzijian/article/details/8025091


首先看書上說的,將一個複雜對象的結構與它表示分離,是同樣的構建過程可以構建不同的表示

原以爲就是一個非常複雜的,有多個部分組成,單獨把每個部分提取出來創建,再通過繼承的方式創建不同的複雜對象


後來發現自己進入了一個誤區,首先應該肯定的是Builder是創建型的模式,主要用於創建一個複雜的對象。至於有人說把Builder當做創建型會讓人進入誤區,多數是理論派的代表。


先來看下Builder 模式結構圖


(圖來源於書上)

多繼承是一種實現方式,並非最優化的方式。

可以通過繼承BuildPartA、BuildPartB、BuildPartC的方式來創建不同的複雜對象

缺點是:每當有新類型產生是,需要添加代碼,即每個對象都有自己的BuildPartA。。。


單繼承多實現:通過添加變量的方式實現不同對象創建,有如下兩種方式:

1.在GetProduct中添加變量:

void ConcreteBuilder::GetProduct(string type) 
{ 
    switch(type)
    {
        case "A":
            BuildPartA(); 
            break
            
        case "BC":
            BuildPartB(); 
            BuildPartC(); 
    }
}

2.在BuildPart中添加變量:

void ConcreteBuilder::BuildPartA(const string&buildPara) 
{ 
    cout<<"Step1:Build PartA..."<<buildPara<<endl;     
} 

或者兩種都用,這樣就可以解決不停創建子類的麻煩,由於在每一部構造過程中,可以引入參數,是的經過相同步驟創建最後得到的對象的展示不一樣。


下面附上可運行源碼,linux下make即可:

https://github.com/lengzijian/Builder


代碼結構:

Builder:創建Product對象的所需各部分的抽象接口

ConcreteBuilder:負責chaung見的具體接口

Director:負責發出創建命令

Product:產品

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章