一、建造者模式介紹
建造者模式:將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。 [構建與表示分離,同構建不同表示]
假如乙個物件的構建很複雜,需要很多步驟。則可以使用建造者模式,將其構建物件和組裝成乙個物件這兩步給分開來。構建部分為(builder)和組織部分(director),實現了構建和裝配的解耦。
不同的構建器,相同的裝配也可以做出不同的物件。
相同的構建器,不同的裝配順序也可以做出不同的物件。
例如:現在要生產乙個汽車,會有很多零件,有了零件還需要把這些零件組裝成乙個完整的汽車。建造者模式就是將構建零件(builder)和組裝零件(director)兩個操作給分開。
與抽象工廠的區別:在建造者模式裡,有個指導者,由指導者來管理建造者,使用者是與指導者聯絡的,指導者聯絡建造者最後得到產品。即建造模式可以強制實行一種分步驟進行的建造過程。
二、**實現
**的具體實現:宇宙飛船的實現
1、假如現在要構建乙個宇宙飛船物件,先定義乙個宇宙飛船物件,有一些簡單的屬性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 宇宙飛船
*/
public
class
airship
//軌道艙
class
orbitalmodule
//發動機
class
engine
//逃逸塔
class
escapetower
2、有了以上屬性後,接下來就可以將飛船中部分零件給構建出來了。為了以後構建不同種類的飛船,這裡使用介面來定義構建。有什麼型別的飛船就用什麼
類來實現該介面。
1
2
3
4
5
6
7
8
/**
* 構建介面:用來構建airshipz中元件的介面
*/
public
inte***ce
airshipbuilder
3、把這些零件構建完成後,就需要把構建好的這些元件構建成乙個完整的飛船(airship)了。使用介面來定義,不同型別的飛船組裝可以用不同的具體實現。
1
2
3
4
5
6
7
8
9
10
/**
* 組裝介面:用於將飛船元件組裝起來
*/
public
inte***ce
airshipdirector
4、開始真正的實現飛船的構建和飛船的組裝
4.1、 飛船的構建的實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 具體飛船的構造
*/
public
class
fzairshipbuilder
implements
airshipbuilder
@override
public
orbitalmodule builderorbitalmodule()
@override
public
escapetower builderescapetower()
}
4.2、 具體飛船的組裝實現:這裡需要注意,組裝是需要依賴於構建的(飛船的完整組裝需要飛機的各部件構建成功才能組裝)
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
/**
* 具體飛船的組裝
*/
public
class
fzairshipdirector
implements
airshipdirector
/**
* 組裝具體的物件,為了簡單,這裡的組裝步驟比較簡單。實際產品中較複雜
*/
@override
public
airship directorairship()
}
5、在我們客戶具體使用的時候,只需要知道構建介面、組裝介面和乙個飛船物件,我們根本不需要知道內部怎麼組裝的,內部有多少零件。
只需要知道怎麼使用組裝即可。
1
2
3
4
5
6
7
8
public
static
void
main(string args)
結果如下:
萬能牌發動機
萬能牌逃逸塔
萬能牌軌道艙
三、建造者模式應用場景:
如果乙個物件的構建很複雜,需要很多步驟,則考慮使用建造者模式,把物件的構建和最後的組裝分離開來。
在平常使用的類中如果字尾為builder則就是建造者模式
stringbuilder類的apend方法
sql中的preparedstatement
jdom中的dombuilder、saxbuilder
建造者模式
1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...
建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
建造者模式
建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...