本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-12-15
建造者模式(Builder):将一个复杂对象的构建层与其表示层相互分离,同样的构建过程可采用不同的表示。
var Person = function(name, param, work) {
var _person = new Human(param);
_person.name = new Named(name);
_person.work = new Work(work);
_person.changeWork = function(work) {
_person.work = new Work(work)
}
return _person;
}
var Human = function(param) {
// 技能
this.skill = param && param.skill || '保密';
// 兴趣爱好
this.hobby = param && param.hobby || '保密';
}
Human.prototype = {
getSkill() {
return this.skill;
},
getHobby() {
return this.hobby;
}
}
var Named = function(name) {
var that = this;
(function(name, that) {
that.wholeName = name;
if (name.includes(' ')) {
const [firstName, secondName] = name.split(' ');
this.firstName = firstName;
this.secondName = secondName;
}
})(name, that);
}
var Work = function(work) {
var that = this;
(function(work, that) {
switch(work) {
case 'code':
that.work = '工程师';
that.workDesc = '每天沉醉于编程';
break;
case 'UI':
that.work = '设计师';
that.workDesc = '设计更是一种艺术';
break;
default:
that.work = work;
that.workDesc = '暂不清楚';
break;
}
})(work, that);
}
var p = new Person('xiao ming', { skill: 'JavaScript'}, 'code');
console.log(p.skill); // JavaScript
console.log(p.hobby); // 保密
console.log(p.work.workDesc); // 每天沉醉于编程
p.changeWork('UI');
console.log(p.work.workDesc); // 设计更是一种艺术
在工厂模式中,我们更关注创建对象的结果,而在建造者模式中我们关心的是对象创建过程,通常将类模块化,这样使得创建的每一个模块都可以得到灵活的运用与高质量的复用。当然我们最终的需求是得到一个完整的个体,因此在拆分创建过程。建造者模式不仅仅可得到创建的结果,也参与了创建的过程,对于创建的具体实现的细节也参与了干涉,可以说创建的对象更复杂,或者说这种模式创建的对象是一个复合对象。