04 建造者模式

建造者模式是一种资源整合的模式,就是将不同的部件(类)组合成一个成品,就像建造房子一样,将砂石、钢筋、玻璃等组合成一栋成品的房子。

场景

在项目设计阶段,我们需要尽可能的进行模块化,以降低各个模块的耦合度,实现功能划分。比如实现一个简历,简历中可能有这样的信息:姓名年龄等基本信息、工作经验、职业技能、个人评价等。这些信息可以作为简历对象的属性存在,也可以将它们更细粒度的划分独立的类:基本信息类、工作经验类、职业技能类、个人评价类等。
这样划分方便了后期的维护扩展,比如要在基本信息项中添加新的描述符,只需要修改基本信息类中的内容,而不是对简历类这个大类进行修改,减少了出错的几率,也使代码更加可读可维护。
如何把这些独立的类整合到成品类中呢?这就需要使用建造者模式。

实现

我们来实现上面提到的简历类,首先根据简历的功能模块,来创建几个独立的类。

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}`)
    }
}

// 职业技能类
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}`)
    }
}

接下来,创建一个 Person 类,用来对这些功能类进行组合,也是我们最终要使用的成品类。

// 个人类
class Person{
    constructor(info){
        // 提取个人信息
        const { 
            name,
            school,
            cellphone,
            skill_name,
            skill_desc,
            content
        } = info;
        // 将提取到的信息进行分发,创建相应的对象
        this.personalInfo = new PersonalInfo(name,school,cellphone);
        this.personalSkill = new PersonalSkill(skill_name,skill_desc);
        this.personalState = new PersonalState(content);
    }
}

上面在 Person 类中对 PersonalInfoPersonalSkill````、PersonalState三个工具类进行了整合,对于这三个类的具体实现,Person类中不用担心,交给它们各自实现。Person``` 类只负责组合这些类,其的实例对象也可以访问三个工具类中的方法。
下面是测试代码:

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

// 调用方法
MIKE.personalInfo.showPersonalInfo()
MIKE.personalSkill.showPersonalSkill()
MIKE.personalState.showPersonalState()

运行结果:

name:MIKE,school:MIT,cellphone:13000000000
skill_name:吃东西,skill_desc:吃各种各种好吃的东西~
content:吃货一枚

完。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,662评论 3 13
  • 接触前端两三个月的时候,那时候只是听说设计模式很重要,然后我就去读了一本设计模式的书,读了一部分,也不知道这些设计...
    艰苦奋斗的侯小憨阅读 2,965评论 2 39
  • (题图是陈老师,虽然一般人都会把陈老师理解为冠希老师。) 2011年的4月,我坐地铁去通州北苑买魅族M9,从地铁去...
    泽布隆阅读 439评论 0 51
  • 服务器端规范 CommonJS Node.js CommonJS 定义JavaScript语言后端规范+ 后端语言...
    birdshome阅读 236评论 0 1