建造者是指将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
比如我们以简历模板为例,有求职者、技能、职位、描述的等等一些功能。
// 创建一个人类
var Human = function(phone, skill) {
this.phone = phone || '保密'
this.skill = skill || '保密'
}
Human.prototype = {
getPhone: function() {
return this.phone
},
getSkill: function() {
return this.skill
}
}
// 创建一个姓名类
var Name = function(name) {
this.name = name
}
// 创建一个职位类
var Work = function(work) {
switch (work) {
case 'H5':
this.work = 'H5'
this.descript = '前端码农'
break
case 'Java':
this.work = 'Java'
this.descript = '后端码农'
}
}
Work.prototype.changeDescript = function(str) {
this.descript = str
}
// 创建一个应聘建造者
var Person = function(name, work) {
// 创建应聘者缓存对象
var _person = new Human()
// 创建应聘者姓名
_person.name = new Name(name)
// 创建应聘者职位
_person.work = new Work(work)
// 返回应聘者对象
return _person
}
var person = new Person('Marco', 'H5')
console.log(person.skill) // 保密
console.log(person.name.name) // Marco
console.log(person.work.work) // H5
console.log(person.work.descript) // 前端码农
// 更改一下职位描述
person.work.changeDescript('前端工程师')
console.log(person.work.descript) // 前端工程师
从上面代码可以发现建造者和工厂模式很相似,但是工厂模式创建出来的是一个对象,追求的是创建的结果别无它求,所以那仅仅是一个实实在在的创建过程,而创建者模式就有所不同,它不仅仅可得到创建的结果,然而也参与了创建的具体过程,对于具体实现的细节也参与了干涩。