javascript
一天一个设计模式之JS实现——建造者模式
參考文章:
java設(shè)計模式之建造者模式
一、什么是建造者模式
建造者模式:是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
工廠類模式提供的是創(chuàng)建單個類的模式,而建造者模式則是將各種產(chǎn)品集中起來進行管理,用來創(chuàng)建復(fù)合對象,所謂復(fù)合對象就是指某個類具有不同的屬性。
具體表現(xiàn)為4個角色
產(chǎn)品(Product):建造的產(chǎn)物
導(dǎo)演(Director):指揮建造的過程,不涉及建造的細節(jié)
建造者(Builder):抽象建造過程,規(guī)定產(chǎn)品哪些部分需要創(chuàng)建
具體建造者(ConceteBuilder):實現(xiàn)Builder,實現(xiàn)產(chǎn)品各個部分的建造,并提供產(chǎn)品
使用場景:
需要生成的對象有復(fù)雜的內(nèi)部結(jié)構(gòu),且各部分都會根據(jù)需求發(fā)生組裝變化
缺點:
1、當產(chǎn)品內(nèi)部非常復(fù)雜,需要用大量的具體建造者,導(dǎo)致系統(tǒng)龐大
2、產(chǎn)品要有共同點,范圍受限制
下面舉個例子:肯德基點餐環(huán)節(jié),角色對應(yīng)分別如下
Product:一餐食物(Meal)
Director:前臺銷售員(Seller)
Builder:抽象建造者(Builder)
ConceteBuilder:廚師(Cook)
首先實現(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ù)量的任意組合
抽象建造類Builder
規(guī)范各部分的建造
具體建造類
廚師負責(zé)各個食物的烹飪,并添加到meal里
導(dǎo)演Director
負責(zé)通知廚房需要烹飪啥啥啥。
最后模擬一次下單場景
var seller = new Seller(); var cook = new Cook(); seller.bindCook(cook); seller.placeOrder(1, 2, 3); // 58總結(jié):
易于解耦
將產(chǎn)品本身與產(chǎn)品創(chuàng)建過程進行解耦,可以使用相同的創(chuàng)建過程來得到不同的產(chǎn)品。也就說細節(jié)依賴抽象。
易于精確控制對象的創(chuàng)建
將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰
易于拓展
增加新的具體建造者無需修改原有類庫的代碼,易于拓展,符合“開閉原則“。
總結(jié)
以上是生活随笔為你收集整理的一天一个设计模式之JS实现——建造者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [开发笔记]-C#获取pdf文档的页数
- 下一篇: 文本挖掘预处理之TF-IDF