工厂模式特点,就是创建的结果都是一个完整的个体,我们对创建过程不得而知,我们只了解得到的创建结果对象。而在建造者模式中我们关心的是对象创建过程,因此我们通常将创建对象的类模块化,这样使被创建的类的每一个模块都可以得到灵活的运用与高质量的复用。当然我们最终的需求是要得到一个完整的个体,
因此在拆分创建的整个过程,我们将得到一个统一的结果。当然这种方式对于整体对象类的拆分无形中增加了结构的复杂性,因此如果对象粒度很小,或者模块间的复用率很低并且变动不大,我们最好还是要创建整体对象。
varHuman=function(param) {
this.skill= param && param.skill||'保密';
this.hobby= param && param.hobby||'保密';
}
Human.prototype={
getskill:function() {
return this.skill;
},
getHobby:function() {
return this.hobby;
},
}
//实例化姓名类
varNamed=function(name) {
varthat=this;
//构造器
//构造函数解析姓名的姓与名
(function(name, that) {
that.wholeName= name;
if(name.indexOf(' ')> -1) {
that.FirstName= name.slice(0, name.indexOf(' '));
that.secondName= name.slice(name.indexOf(' '));
}
})(name,that);
}
varWork=function(work) {
varthat=this;
(function(work,that) {
switch(work){
case'code':
that.work='工程师';
that.workDescript='每天沉醉于编程';
break;
case'UI':
case'US':
that.workDescript='设计更似—种艺术';
}
})(work,that)
}
Work.prototype.changeWork=function(work) {
this.work=work
}
Work.prototype.changeDescript=function(setence){
this.workDescript= setence;
}
/***
*应聘者建造者
*参数name:姓名(全名)
*参数work:期望职位
**/
varPerson=function(name,work,param) {
var_person=newHuman(param);
_person.name=newNamed(name);
_person.work=newWork(work);
return_person;
}
varperson=newPerson('xiao ming','code',{skill:"吃吃吃"});
console.log(person.skill);
console.log(person.name.FirstName);
console.log(person.work.work);
网友评论