成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

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

boredream / 1203人閱讀

摘要:參考文章設(shè)計(jì)模式之建造者模式一什么是建造者模式建造者模式是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

參考文章:
java設(shè)計(jì)模式之建造者模式

一、什么是建造者模式
建造者模式:是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
工廠類(lèi)模式提供的是創(chuàng)建單個(gè)類(lèi)的模式,而建造者模式則是將各種產(chǎn)品集中起來(lái)進(jìn)行管理,用來(lái)創(chuàng)建復(fù)合對(duì)象,所謂復(fù)合對(duì)象就是指某個(gè)類(lèi)具有不同的屬性。

具體表現(xiàn)為4個(gè)角色
產(chǎn)品(Product):建造的產(chǎn)物
導(dǎo)演(Director):指揮建造的過(guò)程,不涉及建造的細(xì)節(jié)
建造者(Builder):抽象建造過(guò)程,規(guī)定產(chǎn)品哪些部分需要?jiǎng)?chuàng)建
具體建造者(ConceteBuilder):實(shí)現(xiàn)Builder,實(shí)現(xiàn)產(chǎn)品各個(gè)部分的建造,并提供產(chǎn)品

使用場(chǎng)景:
需要生成的對(duì)象有復(fù)雜的內(nèi)部結(jié)構(gòu),且各部分都會(huì)根據(jù)需求發(fā)生組裝變化
缺點(diǎn):
1、當(dāng)產(chǎn)品內(nèi)部非常復(fù)雜,需要用大量的具體建造者,導(dǎo)致系統(tǒng)龐大
2、產(chǎn)品要有共同點(diǎn),范圍受限制

下面舉個(gè)例子:肯德基點(diǎn)餐環(huán)節(jié),角色對(duì)應(yīng)分別如下
Product:一餐食物(Meal)
Director:前臺(tái)銷(xiāo)售員(Seller)
Builder:抽象建造者(Builder)
ConceteBuilder:廚師(Cook)

首先實(shí)現(xiàn)一些食物

// Food 食物抽象類(lèi)
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;
    }
}
// 可樂(lè)
class Coke extends Food {
    constructor() {
        super();
        this.name = "可樂(lè)";
        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;
    }
}

抽象建造類(lèi)Builder
規(guī)范各部分的建造

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

具體建造類(lèi)
廚師負(fù)責(zé)各個(gè)食物的烹飪,并添加到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("總價(jià):" + meal.showPrice());
        return meal;
    }
}

最后模擬一次下單場(chǎng)景

var seller = new Seller();
var cook = new Cook();
seller.bindCook(cook);
seller.placeOrder(1, 2, 3); // 58

總結(jié):
易于解耦
將產(chǎn)品本身與產(chǎn)品創(chuàng)建過(guò)程進(jìn)行解耦,可以使用相同的創(chuàng)建過(guò)程來(lái)得到不同的產(chǎn)品。也就說(shuō)細(xì)節(jié)依賴(lài)抽象。
易于精確控制對(duì)象的創(chuàng)建
將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過(guò)程更加清晰
易于拓展
增加新的具體建造者無(wú)需修改原有類(lèi)庫(kù)的代碼,易于拓展,符合“開(kāi)閉原則“。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/93777.html

相關(guān)文章

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

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

    Muninn 評(píng)論0 收藏0
  • JS 建造模式

    摘要:如何應(yīng)對(duì)這種變化如何提供一種封裝機(jī)制來(lái)隔離出復(fù)雜對(duì)象的各個(gè)部分的變化,從而保持系統(tǒng)中的穩(wěn)定構(gòu)建算法不隨著需求改變而改變這就是要說(shuō)的建造者模式。建造者模式,將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,使得同樣的構(gòu)建過(guò)程可以采用不同的表示。 1. 簡(jiǎn)介 在軟件系統(tǒng)中,有時(shí)候面臨著一個(gè)復(fù)雜對(duì)象的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著...

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

    摘要:注意事項(xiàng)聲明函數(shù)時(shí)候處理業(yè)務(wù)邏輯區(qū)分和單例的區(qū)別,配合單例實(shí)現(xiàn)初始化構(gòu)造函數(shù)大寫(xiě)字母開(kāi)頭推薦注意的成本。簡(jiǎn)單工廠模式使用一個(gè)類(lèi)通常為單體來(lái)生成實(shí)例。 @(書(shū)籍閱讀)[JavaScript, 設(shè)計(jì)模式] 常見(jiàn)設(shè)計(jì)模式 一直對(duì)設(shè)計(jì)模式不太懂,花了一下午加一晚上的時(shí)間,好好的看了看各種設(shè)計(jì)模式,并總結(jié)了一下。 設(shè)計(jì)模式簡(jiǎn)介 設(shè)計(jì)模式概念解讀 設(shè)計(jì)模式的發(fā)展與在JavaScript中的應(yīng)用 ...

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

    摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類(lèi)創(chuàng)建具體建造者類(lèi)。建造者模式使用場(chǎng)景建造者模式使用場(chǎng)景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時(shí),可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...

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

    摘要:建造者實(shí)現(xiàn)抽象類(lèi)的所有未實(shí)現(xiàn)的方法,具體來(lái)說(shuō)一般是兩項(xiàng)任務(wù)組建產(chǎn)品返回組建好的產(chǎn)品。 0x01.定義與類(lèi)型 定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 用戶(hù)只需指定需要建造的類(lèi)型就可以得到他們,建造過(guò)程及細(xì)節(jié)不需要知道 類(lèi)型:創(chuàng)建型 實(shí)現(xiàn)建造模式的兩種方式 1.抽象建造者 UML: showImg(https://segmentfault.co...

    banana_pi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

boredream

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<