1. 概述
將乙個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。
2. 建造者模式中的角色
2.1 建造者(builder):為建立乙個產品物件的各個部件指定抽象介面。
2.2 具體建造者(concretebuilder):實現builder的介面以構造和裝配該產品的各個部件,定義並明確它所建立的表示,並 提供乙個檢索產品的介面。
2.3 指揮者(director):指揮並構造乙個使用builder介面的物件。
2.4 產品(product):表示被構造的複雜物件。concretebuilder建立該產品的內部表示並定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產品的介面。
3. 例項:建立乙個人,這個人可以有不同的特點,可以是胖子,可以是瘦子,可以是高個子,也可以是矮個子。
3.1 以下是這個例項的類圖,以及對類圖的解讀。
3.2 **實現及解讀:
//4. 模式總結要建造的產品
public
class
person
public
string body
public
string arm
public
string leg
}//定義建立者介面,實現者必須實現該介面中定義的所有抽象方法,防止實現者疏忽而遺漏某個部件的建立
public
abstract
class
builder
public
builder()
//建造頭
public
abstract
void
buildhead();
//建造身體
public
abstract
void
buildbody();
//建造胳膊
public
abstract
void
buildarm();
//建造腿
public
abstract
void
buildleg();
//返回生成好的物件,這是乙個具體方法,每個子類都可以使用它來返回乙個已經建立成功的物件
public
person getperson()
}//建造者的具體實現,這裡是要建造出乙個瘦子
public
class
thinpersonbuilder : builder
public
override
void
buildhead()
public
override
void
buildbody()
public
override
void
buildarm()
public
override
void
buildleg()
}//建造者的具體實現,這裡是要建造出乙個胖子
public
class
fatpersonbuilder : builder
public
override
void
buildbody()
public
override
void
buildarm()
public
override
void
buildleg()
}//建造者模式中的指揮者
public
class
persondirector
//指揮建立乙個人的過程,並返回建立成功的產品
public
person buildperson()
}
4.1 優點
4.1.1 使用者只需要指定要建造的型別就可以得到它們,而具體的建造過程和細節不需要知道。
4.1.2 建造**與表示相分離,如果要改變乙個產品的內部表示,只要再定義乙個新的具體的建造者就可以了。
4.1.3 建造過程由指揮者來控制,建造細節由乙個抽象類來控制,對於實現建造細節的具體類來說,不會遺漏某乙個步驟。
4.2 缺點
以上例子說明,現在我要增加產品的乙個細節,如把建立腳的過程也新增進來,看我們需要改哪些類。buider,fatpersonbuilder,thinpersonbuilder(甚至更多,如果你實現了tallpersonbuilder,shortpersonbuilder等),persondirector,我們對修改也就開放了。
4.3 實用範圍
4.3.1 當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。
4.3.2 當複雜物件的部件相對穩定,不會發生變化時
設計模式學習筆記(7) 建造者模式
本人做的設計模式學習筆記系列的博文旨在用於個人學習之用,主要記載自己對設計模式的理解及 的實現 在建造者模式中,主要的角色有指揮者 抽象建造者類 具體建造者類和產品角色,建造者模式主要為構建多個組成元素相近,包含很多屬性和方法的複雜結構物件提供建造的模板,並且由指揮者指揮建造的流程。以下給出 複雜產...
設計模式學習筆記 建造者模式(Builder)
三 建造者模式和工廠模式的比較 不要沮喪,不必驚慌,做努力爬的蝸牛或堅持飛的笨鳥,我們試著長大,一路跌跌撞撞,然後遍體鱗傷。堅持著,總有一天,你會站在最亮的地方,活成自己曾經渴望的模樣。建造者模屬於設計模式中的建立型模式。建造者模式提供了一種最佳的建立物件的方式。建造者模式將乙個複雜的物件的構建與其...
學習設計模式 建造者模式
說明 如果你需要將乙個複雜的物件或功能的構建流程和表示分離,使得同樣的構建流程,也可以建立出不同的表示,例如麥當勞做炸東西,炸東西的流程是一樣的,但放入的材料不同,炸出來的東西不一樣 例如雞排 雞腿 雞翅等 需求 使用者要個炸雞腿 解決方式 a.定義乙個產品類 炸東西 b.定義乙個構建產品部分或過程...