摘要:參考文章設(shè)計(jì)模式之建造者模式一什么是建造者模式建造者模式是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
參考文章:
java設(shè)計(jì)模式之建造者模式
一、什么是建造者模式
建造者模式:是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
工廠類模式提供的是創(chuàng)建單個類的模式,而建造者模式則是將各種產(chǎn)品集中起來進(jìn)行管理,用來創(chuàng)建復(fù)合對象,所謂復(fù)合對象就是指某個類具有不同的屬性。
具體表現(xiàn)為4個角色
產(chǎn)品(Product):建造的產(chǎn)物
導(dǎo)演(Director):指揮建造的過程,不涉及建造的細(xì)節(jié)
建造者(Builder):抽象建造過程,規(guī)定產(chǎn)品哪些部分需要創(chuàng)建
具體建造者(ConceteBuilder):實(shí)現(xiàn)Builder,實(shí)現(xiàn)產(chǎn)品各個部分的建造,并提供產(chǎn)品
使用場景:
需要生成的對象有復(fù)雜的內(nèi)部結(jié)構(gòu),且各部分都會根據(jù)需求發(fā)生組裝變化
缺點(diǎn):
1、當(dāng)產(chǎn)品內(nèi)部非常復(fù)雜,需要用大量的具體建造者,導(dǎo)致系統(tǒng)龐大
2、產(chǎn)品要有共同點(diǎn),范圍受限制
下面舉個例子:肯德基點(diǎn)餐環(huán)節(jié),角色對應(yīng)分別如下
Product:一餐食物(Meal)
Director:前臺銷售員(Seller)
Builder:抽象建造者(Builder)
ConceteBuilder:廚師(Cook)
首先實(shí)現(xiàn)一些食物
// Food 食物抽象類 class Food { constructor() { this.name = null; this.price = null; } } // 漢堡 class Burger extends Food { constructor() { super(); this.name = "漢堡"; this.price = 16; } } // 雞翅 class ChickenWing extends Food { constructor() { super(); this.name = "雞翅"; this.price = 12; } } // 可樂 class Coke extends Food { constructor() { super(); this.name = "可樂"; this.price = 6; } }
產(chǎn)品Product
一桌餐飯可以有任意數(shù)量的任意組合
// Product class Meal { constructor() { this.foods = []; } addFood(item) { this.foods.push(item); } showPrice() { var i = this.foods.length, price = 0; while(i--) { price += this.foods[i].price; } return price; } }
抽象建造類Builder
規(guī)范各部分的建造
// Builder class Builder { cookBurger() {} cookWing() {} cookCoke() {} finishCook() {} }
具體建造類
廚師負(fù)責(zé)各個食物的烹飪,并添加到meal里
// ConceteBuilder class Cook extends Builder { constructor() { super(); this.meal = new Meal(); } cookBurger(number) { for (var i = 0; i < number; i++) { this.meal.addFood(new Burger()); } } cookWing(number) { for (var i = 0; i < number; i++) { this.meal.addFood(new ChickenWing()); } } cookCoke(number) { for (var i = 0; i < number; i++) { this.meal.addFood(new Coke()); } } finishCook() { return this.meal; } }
導(dǎo)演Director
負(fù)責(zé)通知廚房需要烹飪啥啥啥。
// Director class Seller { constructor() { this.builder = null; } bindCook(builder) { this.builder = builder; } placeOrder(burgerAmount, wingAmount, cokeAmount) { this.builder.cookBurger(burgerAmount); this.builder.cookWing(wingAmount); this.builder.cookCoke(cokeAmount); var meal = this.builder.finishCook(); console.log("總價:" + meal.showPrice()); return meal; } }
最后模擬一次下單場景
var seller = new Seller(); var cook = new Cook(); seller.bindCook(cook); seller.placeOrder(1, 2, 3); // 58
總結(jié):
易于解耦
將產(chǎn)品本身與產(chǎn)品創(chuàng)建過程進(jìn)行解耦,可以使用相同的創(chuàng)建過程來得到不同的產(chǎn)品。也就說細(xì)節(jié)依賴抽象。
易于精確控制對象的創(chuàng)建
將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰
易于拓展
增加新的具體建造者無需修改原有類庫的代碼,易于拓展,符合“開閉原則“。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93777.html
摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的...
摘要:如何應(yīng)對這種變化如何提供一種封裝機(jī)制來隔離出復(fù)雜對象的各個部分的變化,從而保持系統(tǒng)中的穩(wěn)定構(gòu)建算法不隨著需求改變而改變這就是要說的建造者模式。建造者模式,將一個復(fù)雜對象的構(gòu)建層與其表示層相互分離,使得同樣的構(gòu)建過程可以采用不同的表示。 1. 簡介 在軟件系統(tǒng)中,有時候面臨著一個復(fù)雜對象的創(chuàng)建工作,其通常由各個部分的子對象用一定的算法構(gòu)成;由于需求的變化,這個復(fù)雜對象的各個部分經(jīng)常面臨著...
摘要:注意事項(xiàng)聲明函數(shù)時候處理業(yè)務(wù)邏輯區(qū)分和單例的區(qū)別,配合單例實(shí)現(xiàn)初始化構(gòu)造函數(shù)大寫字母開頭推薦注意的成本。簡單工廠模式使用一個類通常為單體來生成實(shí)例。 @(書籍閱讀)[JavaScript, 設(shè)計(jì)模式] 常見設(shè)計(jì)模式 一直對設(shè)計(jì)模式不太懂,花了一下午加一晚上的時間,好好的看了看各種設(shè)計(jì)模式,并總結(jié)了一下。 設(shè)計(jì)模式簡介 設(shè)計(jì)模式概念解讀 設(shè)計(jì)模式的發(fā)展與在JavaScript中的應(yīng)用 ...
摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類創(chuàng)建具體建造者類。建造者模式使用場景建造者模式使用場景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時,可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...
摘要:建造者實(shí)現(xiàn)抽象類的所有未實(shí)現(xiàn)的方法,具體來說一般是兩項(xiàng)任務(wù)組建產(chǎn)品返回組建好的產(chǎn)品。 0x01.定義與類型 定義:將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 用戶只需指定需要建造的類型就可以得到他們,建造過程及細(xì)節(jié)不需要知道 類型:創(chuàng)建型 實(shí)現(xiàn)建造模式的兩種方式 1.抽象建造者 UML: showImg(https://segmentfault.co...
閱讀 2553·2023-04-26 00:57
閱讀 923·2021-11-25 09:43
閱讀 2228·2021-11-11 16:55
閱讀 2240·2019-08-30 15:53
閱讀 3604·2019-08-30 15:52
閱讀 1471·2019-08-30 14:10
閱讀 3388·2019-08-30 13:22
閱讀 1221·2019-08-29 11:18