美文网首页JavaScript
04 建造者模式

04 建造者模式

作者: 柏丘君 | 来源:发表于2017-08-08 17:58 被阅读5次

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

    场景

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

    实现

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

    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:吃货一枚
    

    完。

    相关文章

      网友评论

        本文标题:04 建造者模式

        本文链接:https://www.haomeiwen.com/subject/txfxrxtx.html