2012年12月22日 星期六

Builder



目的

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:



範例程式(組裝電腦):

範例程式與 Class Diagram 的對應關係:
  • Director <==> Director
  • Builder <==> ComputerBuilder
  • ConcreteBuilder <==> GeneralComputerBuilder、PowerfulComputerBuilder

注意,通常在 Builder 這個介面中,會定義好幾個 buildPart(),每個 buildPart() 定義這部分的零件要如何產生出來,然後給 ConcreteBuilder 實作
至於建構的流程,則是交給 Director 的 construct() 去決定
可能會呼叫好幾個 buildPart() 去完成一個複雜的物件,或者只挑某幾個 buildPart()
最後生成的一個複雜物件則透過 getResult() 來取得
因此對於有相同流程但組成細節會不一樣的生成方式,非常適合用 Builder


[1] "物件導向設計模式", Gamma, Johnson, Helm, Vlissides 著, 葉秉哲譯