天天看點

建造者模式(Java與Kotlin版)

. 定義

建造者模式(Builder Pattern):将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。

2. 結構

Product:産品角色;

Director:指揮者,利用具體建造者建立産品;

AbstractBuilder:抽象建造者,定義抽象的建造方法;

ConcreteBuilder:具體建造者,實作建造方法;

3. 代碼

3.1 Java

Product:

除了兩個屬性的set方法,還定義了一個列印屬性的show方法。

Director:

通過設定的建造者,建立産品執行個體并傳回。

AbstractBuilder:

定義了三個抽象方法,用于設定産品屬性及擷取執行個體。

ConcreteBuilder1與ConcreteBuilder2:

具體建造者,實作産品的建立。

測試代碼:

輸出:

建造者模式(Java與Kotlin版)

3.2 Kotlin

輸出同上。

4. 優缺點

4.1 優點

在建造者模式中, 用戶端不必知道産品内部組成的細節,将産品本身與産品的建立過程解耦,使得相同的建立過程可以建立不同的産品對象;

每一個具體建造者都相對獨立,而與其他的具體建造者無關,是以可以很友善地替換具體建造者或增加新的具體建造者, 使用者使用不同的具體建造者即可得到不同的産品對象 ;

可以更加精細地控制産品的建立過程 。将複雜産品的建立步驟分解在不同的方法中,使得建立過程更加清晰,也更友善使用程式來控制建立過程;

增加新的具體建造者無須修改原有類庫的代碼,指揮者類針對抽象建造者類程式設計,系統擴充友善,符合“開閉原則”。

4.2 缺點

建造者模式所建立的産品一般具有較多的共同點,其組成部分相似,如果産品之間的差異性很大,則不适合使用建造者模式,是以其使用範圍受到一定的限制;

如果産品的内部變化複雜,可能會導緻需要定義很多具體建造者類來實作這種變化,導緻系統變得很龐大。

5. 适用場景

需要生成的産品對象有複雜的内部結構,這些産品對象通常包含多個成員屬性;

需要生成的産品對象的屬性互相依賴,需要指定其生成順序;

對象的建立過程獨立于建立該對象的類。在建造者模式中引入了指揮者類,将建立過程封裝在指揮者類中,而不在建造者類中;

隔離複雜對象的建立和使用,并使得相同的建立過程可以建立不同的産品。

      本文轉自zsdnr  51CTO部落格,原文連結:http://blog.51cto.com/12942149/1949754,如需轉載請自行聯系原作者