摘要:建造者模式建造者模式將一個(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
摘要:優(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)建層與...
摘要:書(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)建層與其表...
摘要:書(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)建層與其表...
摘要:注意事項(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)用 ...
閱讀 1748·2023-04-26 02:11
閱讀 3066·2023-04-25 16:18
閱讀 3772·2021-09-06 15:00
閱讀 2712·2019-08-30 15:55
閱讀 1995·2019-08-30 13:20
閱讀 2107·2019-08-26 18:36
閱讀 3200·2019-08-26 11:40
閱讀 2640·2019-08-26 10:11