// 实例化人类
var Human = function(param){
// 技能
this.skill = param && param.skill || '保密';
}
Human.prototype.getSkill = function() {
return this.skill;
}
// 实例化姓名类
var Named = function(name){
(function(name, that){
that.wholdName = name;
nameList = name.split(/\s+/);
if( nameList.length === 2){
that.FirstName = nameList[0];
that.SecondName = nameList[1];
}
})(name, this)
}
// 实例化职位类
var Work = function(workName){
var workList = {
'code': ['工程师', '每天沉醉于编程'],
'UI' : ['设计师', '设计更似一种艺术'],
'UE' : ['设计师', '设计更似一种艺术'],
'teach' : ['教师', '分享也是一种艺术'],
}
if (workList[workName] ){
this.wrok = workList[workName][0];
this.workDescript = workList[workName][1];
} else {
this.wrok = workName;
this.workDescript = '对不起,我们还不清楚你选择职位的相关描述';
}
}
Work.prototype.changeWork = function(work){
this.work = work;
}
// 建设者类
var Person = function(name, work){
var _person = new Human();
_person.name = new Named(name);
_person.work = new Work(work);
return _person;
}
对长点评
在建造者模式中我们更关心对象的创建过程,因些我们通常将创建对象的类模块化,这样使得被创建的类的每一个模块都可以得到灵活的运用与高质量的复用。
这种方式对于整体对象类的拆分无形中增加了结构的复杂性,因此如果对象料度很小,或者模块间的复用率很低并且变化不大,我们最好还是创建整体对象
本文实例来源于张容铭大神写的《JavaScript设计模式》一书。