摘要:建造者模式示例描述將一個(gè)復(fù)雜的對象構(gòu)建層與其表示層相互分離同樣的構(gòu)建過程中可采用不同的表示建造者模式與工廠模式的不同之處在于它更多關(guān)心創(chuàng)建對象的過程甚至于每一個(gè)創(chuàng)建對象的細(xì)節(jié)案例有一批求職者到招聘網(wǎng)站發(fā)布自己的簡歷要求除了興趣愛好可以發(fā)布在
建造者模式 示例 描述
將一個(gè)復(fù)雜的對象構(gòu)建層與其表示層相互分離, 同樣的構(gòu)建過程中可采用不同的表示. 建造者模式與工廠模式的不同之處在于, 它更多關(guān)心
創(chuàng)建對象的過程, 甚至于每一個(gè)創(chuàng)建對象的細(xì)節(jié).
有一批求職者到招聘網(wǎng)站發(fā)布自己的簡歷.要求:除了興趣愛好可以發(fā)布在頁面上, 個(gè)人聯(lián)系方式不能發(fā)布, 要讓需求公司找招聘平臺(tái).
需要找的工作可以分類.
分析明確創(chuàng)建內(nèi)容:
創(chuàng)建用戶信息如用戶名等需要獨(dú)立處理, 因?yàn)樾枰[藏顯示
應(yīng)聘者需要獨(dú)立創(chuàng)建, 因?yàn)樗麄兇硪粋€(gè)整體
工作職位需要獨(dú)立創(chuàng)建, 因?yàn)樗麄兪菓?yīng)聘者擁有的一部分, 而且種類較多
實(shí)現(xiàn)// 創(chuàng)建一位人類 var Human = function(param) { this.skill = param && param.skill || "保密"; this.hobby = param && param.hobby || "保密"; }; Human.prototype = { getSkill: function() { return this.skill }, getHobby: function() { return this.hobby } }; // 實(shí)例化姓名類 var Named = function(name) { var that = this; // 構(gòu)造器解析姓名的姓與名 (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() { var that = this; // 構(gòu)造器中通過傳入的職位特征來設(shè)置相應(yīng)職位以及描述 (function(work, that) { switch(work) { case "code": that.work = "工程師"; that.workDescript = "每天沉醉于編程"; break; case "UI": // ... case "UE": // ... default: that.work = work; that.workDescript = "對不起, 我們還不清楚您所選擇職位的相關(guān)描述"; } })(work, that); }; //更換期望的崗位 Work.prototype.changeWork = function(work) { this.work = work; }; // 添加對職位的描述 Work.prototype.changeDescript = function(setence) { this.workDescript = setence; }; /** * 應(yīng)聘者建造者 * 參數(shù) name: 姓名 * 參數(shù) work: 期望職位 */ var Person = function(name, work) { // 創(chuàng)建應(yīng)聘者緩存對象 var _person = new Human(); // 創(chuàng)建應(yīng)聘者姓名解析對象 _person.name = new Named(name); // 創(chuàng)建應(yīng)聘者期望職位 _person.work = new Work(work); // 將應(yīng)聘者對象返回 return _person; }; // test: var person = new Person("xiao ming", "code"); console.log(person.skill); // 保密 console.log(person.name.FirstName); // xiao console.log(person.work); // 工程師 console.log(person.work.workDescript); // 每天沉醉于編程 person.work.changeDescript("更改一下職位描述"); console.log(person.work.workDescript); // 更改一下職位描述
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80151.html
摘要:而建造者模式則是要求按照指定的藍(lán)圖建造產(chǎn)品,它的主要目的是通過組裝零配件而產(chǎn)生一個(gè)新產(chǎn)品。最后通過一個(gè)套餐實(shí)例,介紹了建造者模式在實(shí)例中的基本使用手段。 歷史文章回顧: 設(shè)計(jì)模式專欄 深入理解單例模式 深入理解工廠模式 歷史優(yōu)質(zhì)文章推薦: 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問題看這篇就夠了 無論是在現(xiàn)實(shí)世界中還是在軟件...
摘要:汽車本身就是復(fù)雜產(chǎn)品對象,其制造過程可以形象的表示建造者模式。另一輛法拉利,。法拉利具體建造者代碼如下構(gòu)造法拉利的第一部分。咻咻法拉利已造好三建造者模式的優(yōu)缺點(diǎn)優(yōu)點(diǎn)降低代碼耦合度。 在未上大學(xué)之前,一直有個(gè)夢想I have a dream!,就是能成為一位汽車工程師,一直幻想著開著自己設(shè)計(jì)的汽車飛奔在公路上,迷倒了萬千少女??瓤葉~雖然現(xiàn)在沒實(shí)現(xiàn)我的dream,但夢想還是得有的。 說到...
摘要:與工廠模式相比,建造者模式一般用來創(chuàng)建更為復(fù)雜的對象,因?yàn)閷ο蟮膭?chuàng)建過程更為復(fù)雜,因此將對象的創(chuàng)建過程獨(dú)立出來組成一個(gè)新的類導(dǎo)演類。 什么是建造者設(shè)計(jì)模式 建造者模式:將一個(gè)復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示的設(shè)計(jì)模式。 設(shè)計(jì)場景: 有一個(gè)用戶的UserInfo類,創(chuàng)建這個(gè)類,需要?jiǎng)?chuàng)建用戶的姓名,年齡,愛好等信息,才能獲得用戶具體的信息結(jié)果。如: 這是一個(gè)...
摘要:優(yōu)點(diǎn)建造者模式的封裝性很好,對象本身與構(gòu)建過程解耦。建造者模式很容易進(jìn)行擴(kuò)展。適用場景需要生成的對象具有復(fù)雜得內(nèi)部結(jié)構(gòu)且內(nèi)部屬性本身相互依賴建造者模式的代碼實(shí)現(xiàn)建造者模式主要有個(gè)部分產(chǎn)品類建造者類指揮者類客戶。建造者完成相應(yīng)的部分。 建造者模式 建造者模式(builder pattern)比較簡單,它屬于創(chuàng)建型模式的一種,將一個(gè)復(fù)雜的對象分解成多個(gè)簡單的對象來進(jìn)行構(gòu)建,將復(fù)雜的構(gòu)建層與...
摘要:即建造者模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過程。指導(dǎo)類負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,指導(dǎo)類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與指導(dǎo)類直接交互的是建造者類建造者模式優(yōu)點(diǎn)建造者模式的封裝性很好。 建造者模式 將一個(gè)復(fù)雜的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。主要解決在軟件系統(tǒng)中,有時(shí)候面臨著一個(gè)復(fù)雜對象的創(chuàng)建工作,由于需求的變化,這個(gè)復(fù)雜對象的某些部分經(jīng)常面臨著劇烈的變化...
閱讀 1348·2023-04-26 03:05
閱讀 802·2021-10-19 11:43
閱讀 3278·2021-09-26 09:55
閱讀 851·2019-08-30 15:56
閱讀 1013·2019-08-30 15:44
閱讀 1273·2019-08-30 15:44
閱讀 2750·2019-08-30 14:23
閱讀 3263·2019-08-30 13:13