設計模式 建造者模式(builder)

2021-09-10 02:10:15 字數 1979 閱讀 3482

參考文章:

關於建造者模式網上有很多文章,也有些不同的理解。在此結合網上其他文章對建造者模式進行總結。

總體說來,建造者模式適合於乙個具有較多的零件(屬性)的產品(物件)的建立過程。根據產品建立過程中零件的構造是否具有一致的先後順序,可以將其分為如下兩種形式。

一、通過client、director、builder和product形成的建造者模式

builder負責product類物件的具體過程構建,director負責指導build,要求builder按照其指定的順序去完成produt的構造。最後通過builder返回建造後的結果。網上有人對此種模式進行了形象的模擬。

**)簡單地說,就好象我要一座房子住,可是我不知道怎麼蓋(簡單的砌牆,層次較低),也不知道怎麼樣設計(建幾個房間,幾個門好看,層次較高),於是我需要找一幫民工,他們會砌牆,還得找個設計師,他知道怎麼設計,我還要確保民工聽設計師的領導,而設計師本身也不幹活,光是下命令,這裡砌一堵牆,這裡砌一扇門,這樣民工開始建設,最後,我可以向民工要房子了。在這個過程中,設計師是什麼也沒有,除了他在腦子裡的設計和命令,所以要房子也是跟民工要,記住了!

1.定義產品:

1 class room 

9 10 public void setwindow(window window)

13 14 public floor getfloor()

17 18 public void setfloor(floor floor)

21 }

2.定義builder介面(工人介面)(非必須):

1 package com.qqyumidi;

2 3 /**

4 * 工人介面,定義了工人所要進行的工作。他們負責進行具體部件如窗戶,地板的建造。同時因為房子是民工建的,因此建設完成後由他把房子遞交回房主

5 *

6 */

7 inte***ce builder

3.定義具體的builder——工人,工人用於完成房屋構造過程中每個具體的步驟:

1 class roombuilder implements builder 

9 10 @override

11 public void makefloor()

14 15 @override

16 public room getroom()

19 20 }

4.定義director——房子設計師:

1 class designer 

9 }

5.定義client——房主,房主請設計師和工人造房子:

1 public class client 

13 14 }

ok,這這樣,一座房子建好了。

二、通過靜態內部類等方式實現的零件無序話構造:

常見的經典**如下:

1 package com.qqyumidi;

2 3 public class client

9 }10 11 class user

20 21 public int getage()

24 25 public string getaddress()

28 29 public static class builder

36 37 public builder setage(int age)

41 42 public builder setaddress(string address)

46 47 public user build()

50 }

51 }

使用此種方式可以直接通過聯級形式構造物件非常直觀方便。android中的alertdialog即採用此種方式建立。

Java設計模式(五) 建造者模式Builder

我們要建造乙個複雜的產品。比如 神舟飛船 iphone。這個複雜的產品的建立,有這樣乙個問題需要處理 要構建的物件,宇宙飛船 package com.iter.devbox.builder 宇宙飛船 author shearer public class airship public orbital...

設計模式讀書筆記之建造者模式 Builder

建造者模式 將複雜物件的建造和表示分離,使同樣的建造過程可以創造出不同細節的產品.建造者模式,聽名字就應該知道和工廠模式一樣,是用來創造物件的。但是建造者和工廠模式的區別就是工廠模式只關注最終的產品,它往往是簡單的呼叫被建立者的建構函式 而建造者更關心細節,它定義了建立乙個複雜物件所需的步驟,而建立...

設計模式 建造者模式

在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...