建造者模式(Builder):将一个复杂对象的构建层与其表示层相互分离,同样的结构过程可采用不同的表示。建造者模式更注重的是创建的细节。例如一个应聘者的实例,在创建过程中需要注意应聘者的兴趣爱好,姓名等个人信息,以及期望职位等等。
//创建一个人类
var Human = function(param){
this.skill = param && param.skill || '保密';
this.hobby = param && param.hobby || '保密';
}
//类人原型方法
Human.prototype = {
getSkill:function(){
return this.skill;
},
getHobby:function(){
return this.hobby;
}
}
//实例化姓名类
var Named = function(name){
var that = this;
//构造器 里面解析姓名的姓和名
(function(name,that){
that.wholeName = name;
if(name.indexOf(' ')>-1){
that.firstName = name.slice(0,name.indexOf(' '));
that.lastName = name,slice(name.indexOf(' '));
}
})(name,that)
}
//实例化职位类
var Work = function(work){
var that = this;
//构造器 根据传入的职位特征设置对应职位和描述
(function(work,that){
switch(work){
case 'code':
that.work = '程序员';
that.workDescription = '沉醉于编程';
break;
case 'UE':
that.work = '设计师';
that.workDescription = '设计是一种艺术';
break;
case 'teach':
that.work = '教师';
that.workDescription = '教书育人';
break;
default:
that.work = work;
that.workDescription = '抱歉,不清楚你选择的职位描述'
}
})(work,that)
}
Work.prototype.changeWork = function(work){
this.work = work;
}
Work.prototype.changeDescription = function(sentence){
this.workDescription = sentence;
}这样创建了抽象出来的三个类——应聘者类、姓名解析类与期望职位类。在之后创建一位应聘者,然后将这三个类组合调用,就可以创建出一位完整的应聘者
var Person = function(name,work){
//创建应聘者缓存对象
var _person = new Human()
//创建应聘者姓名解析对象
_person.name = new Named(name);
//创建应聘者期望职位
_person.work = new Work(work);
//返回创建好的应聘者对象
return _person;
}
//创建一个实例即可使用所有属性和方法
var person = new Person('Haoran Li','code');
京公网安备 11010502036488号