成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一天一個設(shè)計(jì)模式之JS實(shí)現(xiàn)——建造者模式

boredream / 1153人閱讀

摘要:參考文章設(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

相關(guān)文章

  • 一天一個設(shè)計(jì)模式JS實(shí)現(xiàn)——工廠模式

    摘要:參考文章深入理解三種工廠模式工廠模式,工廠方法模式,抽象工廠模式詳解工廠模式是中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 參考文章:深入理解java三種工廠模式工廠模式,工廠方法模式,抽象工廠模式 詳解 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的...

    Muninn 評論0 收藏0
  • JS 建造模式

    摘要:如何應(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)常面臨著...

    channg 評論0 收藏0
  • 細(xì)談JavaScript中的一些設(shè)計(jì)模式

    摘要:注意事項(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)用 ...

    30e8336b8229 評論0 收藏0
  • Java設(shè)計(jì)模式(三)——建造模式

    摘要:建造者模式實(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...

    Forelax 評論0 收藏0
  • 設(shè)計(jì)模式建造模式

    摘要:建造者實(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...

    banana_pi 評論0 收藏0

發(fā)表評論

0條評論

boredream

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<