模式簡介
建造者模式又稱生成器模式,所屬創建型設計模式,它提供了一種最佳的創建物件方式,將多個簡單的物件一步一步構建成一個復雜的物件,對于用戶而言,無需知道創建程序和內部組成細節,只需直接使用創建好的物件即可,

建造者模式文章目錄
- 模式簡介
- 結構定義
- 模式案例
- 模式總結
結構定義
建造者模式結構較為復雜,它除了包含建造者類之外,還包含一個指揮者類,
包含角色如下 👇
- Builder(抽象建造者)
抽象建造者為創建一個產品 Product物件的各個部件指定抽象介面,在該介面中一般宣告兩類方法,一類方法是 buildPartX(),它們用于創建復雜物件的各個部件;另一類方法是getResult(),它們用于回傳復雜物件,它既可以是抽象類,也可以是介面,
- ConcreteBuilder(具體建造者)
具體建造者實作了Builder介面,實作各個部件的構造和裝配方法,定義并明確它所創建的復雜物件,也可以提供一個方法回傳創建好的復雜產品物件,
- Product(產品角色)
產品角色是被構建的復雜物件,包含多個組成部件﹐具體建造者創建該產品的內部表示并定義它的裝配程序,
- Director(指揮者)
指揮者又稱為導演類,它負責安排復雜物件的建造次序,指揮者與抽象建造者之間存在關聯關系,可以在其construct()建造方法中呼叫建造者物件的部件構造與裝配方法,完成復雜物件的建造,客戶端一般只需要與指揮者進行互動,在客戶端確定具體建造者的型別,并實體化具體建造者物件(也可以通過組態檔和反射機制),然后通過指揮者類的建構式或者Setter方法將該物件傳入指揮者類中,
模式案例
- 下面通過KFC套餐實體來進一步學習并理解建造者模式,
說明:建造者模式可以用于描述KFC如何創建套餐,套餐是一個復雜物件,它一般包含主食(如漢堡、雞肉卷等)和飲料(如果汁,可樂等)等組成部分,不同的套餐有不同的組成部分,而KFC的服務員可以根據顧客的要求,一步一步裝配這些組成部分,構造一份完整的套餐,然后回傳給顧客,

- 產品類 Meal(套餐類)
套餐類Meal是復雜產品物件﹐它包括兩個成員屬性food 和 drink,其中 food表示主食,drink 表示飲料,在 Meal中還包含成員屬性的Getter方法和Setter方法,

- 抽象建造者類 MealBuilder(套餐建造者類)
MealBuilder是套餐建造者,它是一個抽象類,宣告了抽象的部件組裝方法 buildFood()和 buildDrink(),在 MealBuilder 中定義了Meal型別的物件meal,提供了工廠方法 getMeal()用于回傳meal物件,

- 具體建造者類 SubMealBuilderA(A 套餐建造者類)
SubMealBuilderA是具體建造者類,它用于創建A套餐,它是抽象建造者類的子類,實作了在抽象建造者中宣告的部件組裝方法,該套餐由一個雞腿堡與一杯可樂組成,

- 具體建造者類SubMealBuilderB(B套餐建造者類)
SubMealBuilderB也是具體建造者類,它用于創建B套餐,該套餐由一個雞肉卷與一杯果汁組成,

- 指揮者類 KFCWaiter(服務員類)
KFCWaiter類是指揮者類,在KFC套餐制作程序中,它就是KFC的服務員,在其中定義了一個抽象建造者型別的變數mb,具體建造者型別由客戶端指定,在其construct()方法中呼叫mb物件的部件組裝方法和工廠方法,用于向客戶端回傳-份包含主食和飲料的完整套餐,

- 客戶端測驗類 Client
在客戶端測驗類中,通過new具體建造者類的類名可以獲得一個具體建造者物件mb,然后將其傳入指揮者類KFCWaiter的物件 waiter 中,通過 waiter 的construct()方法來呼叫套餐的組成方法并回傳套餐給客戶端,


如果要更換套餐我們只需要更換具體的建造者無需更改原始碼,如果需要增加一個新的套餐,只需要繼承抽象建造者類,再實作在其中宣告的抽象部件組裝方法,即可使用新的具體建造者構造新的型別的套餐,
模式總結
- 建造者模式的主要優點在于客戶端不必知道產品內部組成的細節,將產品本身與產品的創建程序解耦,使得相同的創建程序可以創建不同的產品物件,每一個具體建造者都相對獨立,而與其他的具體建造者無關,因此可以很方便地替換具體建造者或增加新的具體建造者,符合“開閉原則”,還可以更加精細地控制產品的創建程序,
- 其主要缺點是由于建造者模式所創建的產品一般具有較多的共同點,其組成部分相似,因此其使用范圍受到一定的限制,如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實作這種變化,導致系統變得很龐大,
建造者模式和之前文章所講的工廠模式有何區別 ?
-
工廠模式一般都是創建一個產品,注重的是把這個產品創建出來就行,只要創建出來,不關心這個產品的組成部分,從代碼上看,工廠模式就是一個方法,用這個方法就能生產出產品,
-
建造者模式也是創建一個產品,但是不僅要把這個產品創建出來,還要關系這個產品的組成細節,組成程序,從代碼上看,建造者模式在建造產品時,這個產品有很多方法,建造者模式會根據這些相同方法但是不同執行順序建造出不同組成細節的產品,
好了到此建造者就總結完畢了,如果有幸幫到你還請一鍵三連加個關注~ 感謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/349596.html
標籤:java
