. 定義
建造者模式(Builder Pattern):将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。
2. 結構
Product:産品角色;
Director:指揮者,利用具體建造者建立産品;
AbstractBuilder:抽象建造者,定義抽象的建造方法;
ConcreteBuilder:具體建造者,實作建造方法;
3. 代碼
3.1 Java
Product:
除了兩個屬性的set方法,還定義了一個列印屬性的show方法。
Director:
通過設定的建造者,建立産品執行個體并傳回。
AbstractBuilder:
定義了三個抽象方法,用于設定産品屬性及擷取執行個體。
ConcreteBuilder1與ConcreteBuilder2:
具體建造者,實作産品的建立。
測試代碼:
輸出:

3.2 Kotlin
輸出同上。
4. 優缺點
4.1 優點
在建造者模式中, 用戶端不必知道産品内部組成的細節,将産品本身與産品的建立過程解耦,使得相同的建立過程可以建立不同的産品對象;
每一個具體建造者都相對獨立,而與其他的具體建造者無關,是以可以很友善地替換具體建造者或增加新的具體建造者, 使用者使用不同的具體建造者即可得到不同的産品對象 ;
可以更加精細地控制産品的建立過程 。将複雜産品的建立步驟分解在不同的方法中,使得建立過程更加清晰,也更友善使用程式來控制建立過程;
增加新的具體建造者無須修改原有類庫的代碼,指揮者類針對抽象建造者類程式設計,系統擴充友善,符合“開閉原則”。
4.2 缺點
建造者模式所建立的産品一般具有較多的共同點,其組成部分相似,如果産品之間的差異性很大,則不适合使用建造者模式,是以其使用範圍受到一定的限制;
如果産品的内部變化複雜,可能會導緻需要定義很多具體建造者類來實作這種變化,導緻系統變得很龐大。
5. 适用場景
需要生成的産品對象有複雜的内部結構,這些産品對象通常包含多個成員屬性;
需要生成的産品對象的屬性互相依賴,需要指定其生成順序;
對象的建立過程獨立于建立該對象的類。在建造者模式中引入了指揮者類,将建立過程封裝在指揮者類中,而不在建造者類中;
隔離複雜對象的建立和使用,并使得相同的建立過程可以建立不同的産品。
本文轉自zsdnr 51CTO部落格,原文連結:http://blog.51cto.com/12942149/1949754,如需轉載請自行聯系原作者