日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

一天一个设计模式之JS实现——建造者模式

發布時間:2025/3/17 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一天一个设计模式之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
一桌餐飯可以有任意數量的任意組合

// 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
規范各部分的建造

// Builder class Builder {cookBurger() {}cookWing() {}cookCoke() {}finishCook() {} }

具體建造類
廚師負責各個食物的烹飪,并添加到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;} }

導演Director
負責通知廚房需要烹飪啥啥啥。

// 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

總結:
易于解耦
將產品本身與產品創建過程進行解耦,可以使用相同的創建過程來得到不同的產品。也就說細節依賴抽象。
易于精確控制對象的創建
將復雜產品的創建步驟分解在不同的方法中,使得創建過程更加清晰
易于拓展
增加新的具體建造者無需修改原有類庫的代碼,易于拓展,符合“開閉原則“。

總結

以上是生活随笔為你收集整理的一天一个设计模式之JS实现——建造者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。