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

資訊專欄INFORMATION COLUMN

js常用設(shè)計(jì)模式實(shí)現(xiàn)(三)建造者模式

Apollo / 2305人閱讀

摘要:創(chuàng)建型模式創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過(guò)程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型模式,這一篇說(shuō)一說(shuō)建造者模式建造者模式的定義將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程

創(chuàng)建型模式
創(chuàng)建型模式是對(duì)一個(gè)類的實(shí)例化過(guò)程進(jìn)行了抽象,把對(duì)象的創(chuàng)建和對(duì)象的使用進(jìn)行了分離

關(guān)于創(chuàng)建型模式,已經(jīng)接近尾聲了,還剩下建造者模式和原型模式,這一篇說(shuō)一說(shuō)建造者模式

建造者模式的定義
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

很官方哈,舉個(gè)例子,就拿他的名字來(lái)說(shuō),建房子,你盡管告訴開發(fā)商,我有錢我要一個(gè)這樣的房子,然后開發(fā)商就會(huì)去找到工人,然后進(jìn)行一些列的工作,最后工人干完之后,你住進(jìn)去了,不關(guān)心過(guò)程,只要結(jié)果就是建造者模式

總之建造者模式就是通過(guò)一步步構(gòu)建多個(gè)組成部分,直到構(gòu)建一個(gè)對(duì)象

建造者模式實(shí)現(xiàn)

根據(jù)上邊的例子來(lái)實(shí)現(xiàn)一下建造者

首先你的需求就是你需要一個(gè)你想要的房子,那么你肯定不能自己去建造,首先你會(huì)找到開發(fā)商

    /**
     * @author: 周靖松
     * @information: 開發(fā)商
     * @Date: 2019-07-14 10:11:54
     */
    class Developer {
        constructor() {
            this.need = ["臥室", "廚房", "客廳"];
            console.log("我需要這樣的房間");
        }
    
        construct() {
            console.log("開始建造");
            let workerOk=this.need.map(el=>{
                let builder = new CreatDiagram();
                builder.build(el);
                return builder.getResult();
            })
                
            console.log("房子不錯(cuò)");
            console.log(workerOk);
        }
    }
    // 要求產(chǎn)品
    let home = new Developer();
    // 生成產(chǎn)品
    home.construct();

這是最終的目的,在我們new這個(gè)開發(fā)商類的時(shí)候,我們告訴他我們需要什么樣的房子,需要有什么,然后開發(fā)商也不是自己去建造,他需要一個(gè)設(shè)計(jì)圖,并且需要一些工人來(lái)幫助他實(shí)現(xiàn)建造

    /**
     * @author: 周靖松
     * @information: 設(shè)計(jì)圖抽象類
     * @Date: 2019-07-14 10:11:10
     */
    class Diagram {
        constructor() {
        console.log("拿到圖紙")
        }
    
        build(partName) {
            console.log(`觀察${partName}圖紙`);
        }
    }
    
    /**
     * @author: 周靖松
     * @information: 設(shè)計(jì)圖實(shí)現(xiàn)
     * @Date: 2019-07-14 10:11:25
     */
    class CreatDiagram extends Diagram {
        constructor() {
            super();
        }
    
        build(partName) {
            super.build(partName);
            console.log(`建造開始${partName}`);
            this.worker = new worker(partName);
        }
        getResult() {
            console.log("完工");
            return this.worker;
        }
    }
    

ok 設(shè)計(jì)圖到手,開始招人干活

    /**
     * @author: 周靖松
     * @information: 工人類
     * @Date: 2019-07-14 10:11:40
     */
    class worker {
        constructor(material) {
            console.log(`我建造了${material}`);
            this.data = material
        }
    }
    

最后放一下全部代碼

   /**
     * @author: 周靖松
     * @information: 設(shè)計(jì)圖抽象類
     * @Date: 2019-07-14 10:11:10
     */
    class Diagram {
        constructor() {
        console.log("拿到圖紙")
        }
    
        build(partName) {
            console.log(`觀察${partName}圖紙`);
        }
    }
    
    /**
     * @author: 周靖松
     * @information: 設(shè)計(jì)圖實(shí)現(xiàn)
     * @Date: 2019-07-14 10:11:25
     */
    class CreatDiagram extends Diagram {
        constructor() {
            super();
        }
    
        build(partName) {
            super.build(partName);
            console.log(`建造開始${partName}`);
            this.worker = new worker(partName);
        }
        getResult() {
            console.log("完工");
            return this.worker;
        }
    }
    
    /**
     * @author: 周靖松
     * @information: 工人類
     * @Date: 2019-07-14 10:11:40
     */
    class worker {
        constructor(material) {
            console.log(`我建造了${material}`);
            this.data = material
        }
    }
    
    /**
     * @author: 周靖松
     * @information: 開發(fā)商
     * @Date: 2019-07-14 10:11:54
     */
    class Developer {
        constructor() {
            this.need = ["臥室", "廚房", "客廳"];
            console.log("我需要這樣的房間");
        }
    
        construct() {
            console.log("開始建造");
            let workerOk=this.need.map(el=>{
                let builder = new CreatDiagram();
                builder.build(el);
                return builder.getResult();
            })
                
            console.log("房子不錯(cuò)");
            console.log(workerOk);
        }
    }
    // 要求產(chǎn)品
    let home = new Developer();
    // 生成產(chǎn)品
    home.construct();

具體打印結(jié)果如下

建造者模式的優(yōu)缺點(diǎn) 優(yōu)點(diǎn)

在建造者模式里邊, 你不需要知道建造的過(guò)程是怎么樣的,創(chuàng)建的實(shí)例將會(huì)與過(guò)程解耦。

而且建造者模式里邊可以根部不同的的具體實(shí)現(xiàn)來(lái)得到不同的實(shí)例

建造者模式對(duì)于擴(kuò)展來(lái)說(shuō)很方便,不需要改變?cè)械拇a

缺點(diǎn)

同樣的,如果類內(nèi)部的差異比較大,或者變化復(fù)雜的話,你就會(huì)增加很多對(duì)應(yīng)的實(shí)現(xiàn)類,會(huì)使得代碼比較臃腫

總結(jié)

上一篇介紹的抽象工廠,相比較而言,抽象工廠返回的就好比是房子的一些類的房屋,返回的是具體的小類,比較靈活,隨意組裝,但是像一些復(fù)雜的組成,則有些啰嗦,而建造者則返回的是這些類組裝好的一個(gè)對(duì)象,各有各的應(yīng)用場(chǎng)景,建造者模式可以比較適用與那些有固定生成順序的對(duì)象,或者對(duì)象內(nèi)部有復(fù)雜結(jié)構(gòu)的情況

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105659.html

相關(guān)文章

  • JavaScript設(shè)計(jì)模式系列建造模式

    摘要:優(yōu)點(diǎn)建造者模式的封裝性很好,對(duì)象本身與構(gòu)建過(guò)程解耦。建造者模式很容易進(jìn)行擴(kuò)展。適用場(chǎng)景需要生成的對(duì)象具有復(fù)雜得內(nèi)部結(jié)構(gòu)且內(nèi)部屬性本身相互依賴建造者模式的代碼實(shí)現(xiàn)建造者模式主要有個(gè)部分產(chǎn)品類建造者類指揮者類客戶。建造者完成相應(yīng)的部分。 建造者模式 建造者模式(builder pattern)比較簡(jiǎn)單,它屬于創(chuàng)建型模式的一種,將一個(gè)復(fù)雜的對(duì)象分解成多個(gè)簡(jiǎn)單的對(duì)象來(lái)進(jìn)行構(gòu)建,將復(fù)雜的構(gòu)建層與...

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

    摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類創(chuàng)建具體建造者類。建造者模式使用場(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
  • #yyds干貨盤點(diǎn)#Java設(shè)計(jì)模式之()——建造模式

    1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 說(shuō)人話:將構(gòu)...

    番茄西紅柿 評(píng)論0 收藏2637
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(): 建造模式

    摘要:書籍建造者類調(diào)用建造者高效能人士的七個(gè)習(xí)慣史蒂芬柯維勵(lì)志上面的這個(gè)類和第一個(gè)例子的效果一樣,但是長(zhǎng)度確減少不少,在有更多屬性的時(shí)候,減少的代碼量會(huì)更為明顯。參考內(nèi)容設(shè)計(jì)模式張容銘 showImg(https://segmentfault.com/img/remote/1460000015147692); 1 什么是建造者模式? 建造者模式(Builder)是將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表...

    hatlonely 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(): 建造模式

    摘要:書籍建造者類調(diào)用建造者高效能人士的七個(gè)習(xí)慣史蒂芬柯維勵(lì)志上面的這個(gè)類和第一個(gè)例子的效果一樣,但是長(zhǎng)度確減少不少,在有更多屬性的時(shí)候,減少的代碼量會(huì)更為明顯。參考內(nèi)容設(shè)計(jì)模式張容銘 showImg(https://segmentfault.com/img/remote/1460000015147692); 1 什么是建造者模式? 建造者模式(Builder)是將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表...

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

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

0條評(píng)論

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