天天看點

java設計模式4--建造者模式(Builder)

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

當系統準備為使用者提供一個内部結構複雜的對象時,就可以使用生成器模式,使用該模式可以逐漸地構造對象,使得對象的建立更具彈性。生成器模式的關鍵是将一個包含有多個元件對象的建立分成若幹個步驟,并将這些步驟封裝在一個稱作生成器的接口中。

适用性

1.當建立複雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。

2.當構造過程必須允許被構造的對象有不同的表示時。

參與者

1.builder 為建立一個product對象的各個部件指定抽象接口。

2.concretebuilder 實作builder的接口以構造和裝配該産品的各個部件。 定義并明确它所建立的表示。 提供一個檢索産品的接口。

3.director 構造一個使用builder接口的對象。

4.product 表示被構造的複雜對象。concretebuilder建立該産品的内部表示并定義它的裝配過程。 包含定義組成部件的類,包括将這些部件裝配成最終産品的接口。

模式的結構中包括四種角色:

•産品(product)

•抽象生成器(builder)

•具體生成器(concretebuilder)

•指揮者(director) 

模式的uml類圖

java設計模式4--建造者模式(Builder)

【例1】:建立含有按鈕、标簽和文本框元件的容器。不同使用者對容器有不同的要求,比如某些使用者希望容器中隻含有

按鈕和标簽,某些使用者希望容器隻含有按鈕和文本框等。另外使用者對元件在容器中的順序位置也有不同的要求,比如某些使用者要求元件在容器中從左至右的排列順序

是按鈕、标簽、文本框,而某些使用者要求從左至右的排序時标簽、文本框、按鈕。 

模式的結構的描述與使用

1.産品(product): panelproduct.java

2.抽象生成器(builder): builer.java

3.具體生成器(concretebuilder)_1 : concretebuilderone.java

3.具體生成器(concretebuilder)_2 : concretebuildertwo.java

4.指揮者(director): director.java

5.應用 application.java

【例2】:建構一個男人的類,使得建構和表示分離

類圖如下所示:

java設計模式4--建造者模式(Builder)

builder

concretebuilder

director

product

test

•生成器模式将對象的構造過程封裝在具體生成器中,使用者使用不同的具體生成器就可以得到該對象的不同表示。

•可以更加精細有效地控制對象的構造過程。生成器将對象的構造過程分解成若幹步驟,這就使得程式可以更加精細,有效地控制整個對象的構造。

•生成器模式将對象的構造過程與建立該對象類解耦,使得對象的建立更加靈活有彈性。

•當增加新的具體生成器時,不必修改指揮者的代碼,即該模式滿足開-閉原則。