JavaScript设计模式4——建造者模式

149 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第19天,点击查看活动详情

前言

哈喽,各位看官,我又来写设计模式了,本期我们的主角是——建造者模式。首先,我们来看看什么叫做建造者模式。

建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。——百度百科

百度百科写的已经很明白了,我们就不多做赘述了。直接上demo用例,看看他在开发中的作用如何。

实例

来看这么一个例子,一些交友网站想必大家都有过了解。他上面有这么一个功能,就是说,付费或者开通会员可以得到你对面心仪妹子(大概率抠脚大汉)的联系方式。啊哈,那么有什么更好的方式来帮助我们更好的创建这么一个人的类呢?如果用前面的工厂方法,不管是抽象还是简单还是工厂方法,都避免不了写多个工厂方法。那这是就需要我们的主角登场了。

首先,我们先创建一个人的类,包含电话、住址等信息,并有获取电话、获取住址的方法

class Human {
    constructor(param){
        this.telephone = param?.telephone || '无权查看,请充值会员'
        this.address = param?.address || '无权查看,请充值会员'
    }
    getTel(){
        return this.telephone
    }
    getAddress(){
        return this.address
    }
}

其次,我们创建一个基本信息类,包含姓名,性别,工作以及工作简介等

class BasicInformation {
    constructor(name,sex,work){
        this.name = name
        this.sex = sex
        switch(work){
            case 'code':
                this.work = '程序员'
                this.workDescript = '吃饭睡觉敲代码'
            case 'UI':
                this.work = '设计师'
                this.workDescript = '有一双善于发现美的眼睛'
            case 'teacher'
                this.work = '教师'
                this.workDescript = '恐惧战栗吧,我的学生'
            default: 
                this.work = work
                this.workDescript = '请联系我们更新数据库'
        }
    }
    changeWork(work,workDescript){
        this.work = work
        this.workDescript = workDescript
    }
}

OK,现在我们创建一个网友吧,这里我们用一下构造函数吧。

const NetFriend = function(name,sex,work){
    // 创建网友
    const person = new Human()
    // 创建网友的基本信息
    person.basicInformation = new BasicInformation(name,sex,work)
    // 返回这个人
    return person
}
const person = new Person('zhangsan','女','teacher')

到这一步,我们的示例就差不多完整了。我们来总结一下建造者模式

总结

工厂模式主要是为了创建对象实例或类簇,关心的是最终产出的结果,比起工厂模式,建造者模式更关心的是创建对象的整个过程,比如我们创建一个人,不仅仅要得到他的实例,还要得到创建他的时候,他的姓名,性别,工作等信息。可以看到,在例子中,我们需要的不仅仅是一个人的实例,我们还需要他的地址,联系方式,姓名,工作等信息。而这些信息都是我们在创建的过程中需要创建并注意的。

现在我们就可以理解这句话:创建者模式就是将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。