亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript設(shè)計(jì)模式-建造者模式

CompileYouth / 1063人閱讀

摘要:建造者模式建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,同樣的構(gòu)建過(guò)程可采用不同的表示。工廠模式主要是為了創(chuàng)建對(duì)象實(shí)例或者類簇抽象工廠,關(guān)心的是最終產(chǎn)出創(chuàng)建的是什么,而不關(guān)心創(chuàng)建的過(guò)程。

建造者模式

建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,同樣的構(gòu)建過(guò)程可采用不同的表示。
工廠模式主要是為了創(chuàng)建對(duì)象實(shí)例或者類簇(抽象工廠),關(guān)心的是最終產(chǎn)出(創(chuàng)建)的是什么,而不關(guān)心創(chuàng)建的過(guò)程。而建造者模式關(guān)心的是創(chuàng)建這個(gè)對(duì)象的整個(gè)過(guò)程,甚至于創(chuàng)建對(duì)象的每一個(gè)細(xì)節(jié)。
以下以創(chuàng)建應(yīng)聘者為例:應(yīng)聘者有興趣愛(ài)好,姓名和期望的職位等等

//創(chuàng)建一位人類
var Human = function (param) {
    //技能
    this.skill = param && param.skill || "保密";//如果存在param參數(shù),并且param擁有skill屬性,就用這個(gè)屬性賦值給this的skill屬性,否則將yoga默認(rèn)值保密來(lái)設(shè)置
    this.hobby = param && param.hobby || "保密";
}
//類原型方法
Human.prototype = {
    getSkill : function () {
        return this.skill;
    },
    getHobby :function () {
        return this.hobby;
    }
}

應(yīng)聘者有姓名和工作,先實(shí)例化其姓名類和工作類

//實(shí)例化姓名類
var Named = function (name) {
    var that = this;
    //構(gòu)造器
    //構(gòu)造函數(shù)解析姓名的姓和名
    (function (name, that) {
        that.wholeName = name;
        if(name.indexOf("") > -1){
            that.FirstName = name.slice(0,name.indexOf(" "));
            that.secondName = name.slice(name.indexOf(" "));
        }
    })(name,that);
}
//實(shí)例化職位類
var Work = function (work) {
    var that = this;
    //構(gòu)造器
    //構(gòu)造函數(shù)中通過(guò)傳入的職位特征來(lái)設(shè)置相應(yīng)職位以及描述
    (function (work,that) {
        switch(work){
            case "code":that.work ="工程師";
                        that.workDescript ="每天沉醉于編程";
                        break;
            case "UI":
            case "UE":that.work = "設(shè)計(jì)師";
                        that.workDescript = "設(shè)計(jì)更似一種藝術(shù)";
                        break;
            case "teach":that.work ="教師";
                         that.workDescript = "分享也是一種快樂(lè)";
                         break;
            default:that.work = work;
                    that.workDescript = "對(duì)不起,我們還不清楚您所選擇職位的相關(guān)描述";
        }
    })(work,that);
}
//更換期望的職位
Work.prototype.changeWork = function (work) {
    this.work = work;
}
//添加對(duì)職位的描述
Work.prototype.changeDescript = function (sentence) {
    this.workDescript = sentence;
}

這樣就創(chuàng)建了抽象出來(lái)的3個(gè)類:應(yīng)聘者類,姓名解析類和期望職位類??梢酝ㄟ^(guò)對(duì)這三個(gè)類的組合調(diào)用,寫(xiě)一個(gè)建造者類來(lái)創(chuàng)建出一個(gè)完整的應(yīng)聘對(duì)象。

/**
 *應(yīng)聘者建造類
 * 參數(shù)name:姓名(全名)
 * 參數(shù)work:期望職位
 */
var Person = function (name,work) {
    //創(chuàng)建應(yīng)聘者緩存對(duì)象
    var _person = new Human();
    //創(chuàng)建應(yīng)聘者姓名解析對(duì)象
    _person.name = new Named(name);
    _person.work = new Work(work);
    //將創(chuàng)建的應(yīng)聘者對(duì)象返回
    return _person;
}

創(chuàng)建一位建造者緩存對(duì)象測(cè)試:

//測(cè)試
var person = new Person("xiao ming","code");
console.log(person.skill);//保密
console.log(person.name.FirstName);//xiao
console.log(person.name.secondName);//ming
console.log(person.work.work);//工程師
console.log(person.work.workDescript);//每天沉醉于代碼
person.work.changeDescript("更改描述!");
console.log(person.work.workDescript);//更改描述!

通過(guò)觀察可以發(fā)現(xiàn),建造者模式和工廠模式是有所不同的,建造者模式不僅可以得到創(chuàng)建的結(jié)果,而且參與了創(chuàng)建的具體過(guò)程,也干涉了創(chuàng)建的具體實(shí)現(xiàn)的細(xì)節(jié)。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/98063.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
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(三): 建造模式

    摘要:書(shū)籍建造者類調(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ì)模式(三): 建造模式

    摘要:書(shū)籍建造者類調(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
  • 細(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)生成實(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

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

0條評(píng)論

CompileYouth

|高級(jí)講師

TA的文章

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