目的
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
(從複雜物件的佈局中抽取出生成程序,以便用同一個生成程序製造各種不同的物件佈局。[1])
Builder 是一個和 Factory 一樣的生成模式(Creational Patterns
尤其跟 Abstract Factory 類似,一樣主要用來建構複雜的物件
不同的是,Builder 著重在生成的程序上,強調「一步步建構出一個複雜的物件」,而且是「一個複雜的物件」
然而,Abstract Factory 則著重在多個相關物件,強調「建構出一整族成品物件
Builder 的 UML Class Diagram:
範例程式(組裝電腦):
[1] "物件導向設計模式", Gamma, Johnson, Helm, Vlissides 著, 葉秉哲譯
Builder 是一個和 Factory 一樣的生成模式(Creational Patterns
尤其跟 Abstract Factory 類似,一樣主要用來建構複雜的物件
不同的是,Builder 著重在生成的程序上,強調「一步步建構出一個複雜的物件」,而且是「一個複雜的物件」
然而,Abstract Factory 則著重在多個相關物件,強調「建構出一整族成品物件
Builder 的 UML Class Diagram:
範例程式(組裝電腦):
範例程式與 Class Diagram 的對應關係:
- Director <==> Director
- Builder <==> ComputerBuilder
- ConcreteBuilder <==> GeneralComputerBuilder、PowerfulComputerBuilder
注意,通常在 Builder 這個介面中,會定義好幾個 buildPart(),每個 buildPart() 定義這部分的零件要如何產生出來,然後給 ConcreteBuilder 實作
至於建構的流程,則是交給 Director 的 construct() 去決定
可能會呼叫好幾個 buildPart() 去完成一個複雜的物件,或者只挑某幾個 buildPart()
最後生成的一個複雜物件則透過 getResult() 來取得
因此對於有相同流程但組成細節會不一樣的生成方式,非常適合用 Builder
[1] "物件導向設計模式", Gamma, Johnson, Helm, Vlissides 著, 葉秉哲譯
沒有留言:
張貼留言