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