建造者模式
- 建造者模式注重创建对象的细节,使用这种模式创建出的复杂对象或者复合对象结构会非常清晰
- 举个例子:比如有一家招聘中介公司,现在有一批纸质简历或者简历数据信息,为了做成统一的电子版简历,我们需要将这些信息进行整理,我们该怎么去做
var data = [
{
name: '张三',
age: 24,
work: 'engineer'
},
{
name: "李四",
age: 30,
work: 'teacher'
},
{
name: '王五',
age: 28,
work: 'xxx'
}
]
//普通写法——不是建造者模式
function Candidate(param){
var _candidate = {};
_candidate.name = param.name;
_candidate.age = param.age;
_candidate.firstName = _candidate.name.split("")[0];
_candidate.secondName = _candidate.name.substr(1);
_candidate.work = {};
switch(param.work) {
case 'engineer':
_candidate.work.name = '工程师';
_candidate.work.description = '容易秃头';
break;
case 'teacher':
_candidate.work.name = '老师';
_candidate.work.description = '乐于分享';
break;
default:
_candidate.work.name = param.work;
_candidate.work.description = '无';
}
_candidate.work.changeWork = function(work){
this.name = work;
}
_candidate.work.changeDes = function(des){
this.description = des;
}
return _candidate;
}
var candidateArr = [];
for(var i = 0; i < data.length;i++) {
candidateArr[i] = Candidate(data[i]);
}
console.log(candidateArr);
//使用建造者模式
function Candidate(param){
var _candidate = new Person(param);
_candidate.name = new CreateName(param.name);
_candidate.work = new CreateWork(param.work);
return _candidate;
}
function Person(param){
this.name = param.name;
this.age = param.age;
}
function CreateName(name){
this.wholeName = name;
this.firstName = name.split("")[0];
this.secondName = name.substr(1);
}
function CreateWork(work){
switch(work) {
case 'engineer':
this.name = '工程师';
this.description = '容易秃头';
break;
case 'teacher':
this.name = '老师';
this.description = '乐于分享';
break;
default:
this.name = work;
this.description = '无';
}
}
CreateWork.prototype.changeWork = function(work){
this.name = work;
}
CreateWork.prototype.changeDes = function(des){
this.description = des;
}
var candidateArr = [];
for(var i = 0; i < data.length;i++) {
candidateArr[i] = Candidate(data[i]);
}
console.log(candidateArr);