04 建造者模式

建造者模式是一種資源整合的模式,就是將不同的部件(類)組合成一個成品瘟滨,就像建造房子一樣候醒,將砂石、鋼筋杂瘸、玻璃等組合成一棟成品的房子倒淫。

場景

在項目設(shè)計階段,我們需要盡可能的進(jìn)行模塊化败玉,以降低各個模塊的耦合度敌土,實現(xiàn)功能劃分。比如實現(xiàn)一個簡歷运翼,簡歷中可能有這樣的信息:姓名年齡等基本信息返干、工作經(jīng)驗、職業(yè)技能血淌、個人評價等矩欠。這些信息可以作為簡歷對象的屬性存在,也可以將它們更細(xì)粒度的劃分獨立的類:基本信息類悠夯、工作經(jīng)驗類癌淮、職業(yè)技能類、個人評價類等沦补。
這樣劃分方便了后期的維護(hù)擴(kuò)展乳蓄,比如要在基本信息項中添加新的描述符,只需要修改基本信息類中的內(nèi)容夕膀,而不是對簡歷類這個大類進(jìn)行修改虚倒,減少了出錯的幾率美侦,也使代碼更加可讀可維護(hù)。
如何把這些獨立的類整合到成品類中呢魂奥?這就需要使用建造者模式菠剩。

實現(xiàn)

我們來實現(xiàn)上面提到的簡歷類,首先根據(jù)簡歷的功能模塊捧弃,來創(chuàng)建幾個獨立的類赠叼。

class PersonalInfo{
    constructor(name,school,cellphone){
        this.name = name;
        this.school = school;
        this.cellphone = cellphone;
    }

    showPersonalInfo(){
        console.log(`name:${this.name},school:${this.school},cellphone:${this.cellphone}`)
    }
}

// 職業(yè)技能類
class PersonalSkill{
    constructor(skill_name,skill_desc){
        this.skill_name = skill_name;
        this.skill_desc = skill_desc;
    }

    showPersonalSkill(){
        console.log(`skill_name:${this.skill_name},skill_desc:${this.skill_desc}`)
    }
}

// 個人評價類
class PersonalState{
    constructor(content){
        this.content = content;
    }

    showPersonalState(){
        console.log(`content:${this.content}`)
    }
}

接下來,創(chuàng)建一個 Person 類违霞,用來對這些功能類進(jìn)行組合嘴办,也是我們最終要使用的成品類。

// 個人類
class Person{
    constructor(info){
        // 提取個人信息
        const { 
            name,
            school,
            cellphone,
            skill_name,
            skill_desc,
            content
        } = info;
        // 將提取到的信息進(jìn)行分發(fā)买鸽,創(chuàng)建相應(yīng)的對象
        this.personalInfo = new PersonalInfo(name,school,cellphone);
        this.personalSkill = new PersonalSkill(skill_name,skill_desc);
        this.personalState = new PersonalState(content);
    }
}

上面在 Person 類中對 PersonalInfo涧郊、PersonalSkill````、PersonalState三個工具類進(jìn)行了整合眼五,對于這三個類的具體實現(xiàn)妆艘,Person類中不用擔(dān)心,交給它們各自實現(xiàn)看幼。Person``` 類只負(fù)責(zé)組合這些類批旺,其的實例對象也可以訪問三個工具類中的方法。
下面是測試代碼:

const MIKE = new Person({
name:"MIKE",
school:"MIT",
cellphone:"13000000000",
skill_name:"吃東西",
skill_desc:"吃各種各種好吃的東西~",
content:"吃貨一枚"
});

// 調(diào)用方法
MIKE.personalInfo.showPersonalInfo()
MIKE.personalSkill.showPersonalSkill()
MIKE.personalState.showPersonalState()

運行結(jié)果:

name:MIKE,school:MIT,cellphone:13000000000
skill_name:吃東西,skill_desc:吃各種各種好吃的東西~
content:吃貨一枚

完诵姜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汽煮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棚唆,更是在濱河造成了極大的恐慌暇赤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵凌,死亡現(xiàn)場離奇詭異鞋囊,居然都是意外死亡,警方通過查閱死者的電腦和手機瞎惫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門溜腐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓜喇,你說我怎么就攤上這事挺益。” “怎么了欠橘?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長现恼。 經(jīng)常有香客問我肃续,道長黍檩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任始锚,我火速辦了婚禮刽酱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞧捌。我一直安慰自己棵里,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布姐呐。 她就那樣靜靜地躺著殿怜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曙砂。 梳的紋絲不亂的頭發(fā)上头谜,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音鸠澈,去河邊找鬼柱告。 笑死,一個胖子當(dāng)著我的面吹牛笑陈,可吹牛的內(nèi)容都是我干的际度。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼涵妥,長吁一口氣:“原來是場噩夢啊……” “哼乖菱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妹笆,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤块请,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拳缠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墩新,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年窟坐,在試婚紗的時候發(fā)現(xiàn)自己被綠了海渊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡哲鸳,死狀恐怖臣疑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情徙菠,我是刑警寧澤讯沈,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站婿奔,受9級特大地震影響缺狠,放射性物質(zhì)發(fā)生泄漏问慎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一挤茄、第九天 我趴在偏房一處隱蔽的房頂上張望如叼。 院中可真熱鬧,春花似錦穷劈、人聲如沸笼恰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽社证。三九已至,卻和暖如春练湿,著一層夾襖步出監(jiān)牢的瞬間猴仑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工肥哎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辽俗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓篡诽,卻偏偏與公主長得像崖飘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杈女,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,749評論 25 707
  • 設(shè)計模式基本原則 開放-封閉原則(OCP)朱浴,是說軟件實體(類、模塊达椰、函數(shù)等等)應(yīng)該可以拓展翰蠢,但是不可修改。開-閉原...
    西山薄涼閱讀 3,775評論 3 14
  • 接觸前端兩三個月的時候啰劲,那時候只是聽說設(shè)計模式很重要梁沧,然后我就去讀了一本設(shè)計模式的書,讀了一部分蝇裤,也不知道這些設(shè)計...
    艱苦奮斗的侯小憨閱讀 3,033評論 2 39
  • (題圖是陳老師廷支,雖然一般人都會把陳老師理解為冠希老師。) 2011年的4月栓辜,我坐地鐵去通州北苑買魅族M9恋拍,從地鐵去...
    澤布隆閱讀 458評論 0 51
  • 服務(wù)器端規(guī)范 CommonJS Node.js CommonJS 定義JavaScript語言后端規(guī)范+ 后端語言...
    birdshome閱讀 245評論 0 1