一起养成写作习惯!这是我参与「掘金日新计划 · 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')
到这一步,我们的示例就差不多完整了。我们来总结一下建造者模式
总结
工厂模式主要是为了创建对象实例或类簇,关心的是最终产出的结果,比起工厂模式,建造者模式更关心的是创建对象的整个过程,比如我们创建一个人,不仅仅要得到他的实例,还要得到创建他的时候,他的姓名,性别,工作等信息。可以看到,在例子中,我们需要的不仅仅是一个人的实例,我们还需要他的地址,联系方式,姓名,工作等信息。而这些信息都是我们在创建的过程中需要创建并注意的。
现在我们就可以理解这句话:创建者模式就是将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。