建造者(builder)模式
gof給出的定義為:建造者模式是將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
應用場景
使用建造者模式是為了將構建複雜物件的過程和它的部件解耦。注意:是解耦過程和部件。
參與角色
建造者模式通常包括以下這幾個角色: 1、builder:給出乙個抽象介面,規範建造者對於生產的產品的各個組成部分的建造。這個介面只是定乙個規範,不涉及具體的建造,具體的建造讓繼承於它的子類(concretebuilder)去實現。
2、concretebuilder:實現builder介面,針對不同的商業邏輯,具體化各物件部分的建造,最後返回乙個建造好的產品。
3、director:導演,顧名思義,負責規範流程之用。在指導中不涉及產品的建立,只負責保證複雜物件各部分被建立或按某種順序建立。
4、product:複雜物件。
如何使用建造者模式
首先假設乙個複雜物件是由多個部件組成的,builder模式是把複雜物件的建立和部件的建立分別開來,分別用builder類和director類來表示。
首先,需要乙個介面,它定義如何建立複雜物件的各個部件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public
inte***ce
builder
用director構建最後的複雜物件,而在上面builder介面中封裝的是如何建立乙個個部件(複雜物件是由這些部件組成的),
也就是說director的內容是如何將部件最後組裝成成品:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public
class
director
/** 將部件parta partb partc最後組成複雜物件 */
public
void
construct()
}
builder的具體實現concretebuilder:
通過具體完成介面builder來構建或裝配產品的部件;
定義並明確它所要建立的是什麼具體東西;
提供乙個可以重新獲取產品的介面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public
class
concretebuilder
implements
builder
@override
public
void
buildpartb()
@override
public
void
buildpartc()
@override
public
product getresult()
}
複雜物件產品:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public
class
product
public
void
setparta(parta parta)
public
partb getpartb()
public
void
setpartb(partb partb)
public
partc getpartc()
public
void
setpartc(partc partc)
}
複雜物件的部件:
1
2
3
public
class
parta
1
2
3
public
class
partb
1
2
3
public
class
partc
如何應用:
使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以取得比較好的穩定性。
其次,建造者模式很容易進行擴充套件。如果有新的需求,通過實現乙個新的建造者類就可以完成,基本上不用修改之前已經測試通過的**,因此也就不會對原有功能引入風險。
建立型模式之Builder模式及實現
建造者 builder 模式 gof給出的定義為 建造者模式是將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。應用場景 使用建造者模式是為了將構建複雜物件的過程和它的部件解耦。注意 是解耦過程和部件。參與角色 建造者模式通常包括以下這幾個角色 1 builder 給出乙個...
建立型模式 建造者模式(Builder)
1 建造者模式 工廠類模式提供的是建立單個類例項的模式,而建造者模式則是將 各種產品集中起來進行管理,用來建立復合物件。所謂復合物件 就是指某個類具有不同個的屬性。該模式的意圖是 將乙個複雜 物件的構建與他的表示分離,使得同樣的構建過程可以建立不同的表示。例項一 定義乙個傳送介面 public in...
建立型模式 生成器 builder
將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示.main.cc design patterns builder in the production of mobile phones,for example,now the mobile phone manufacturers...