三、建造者模式
- 概念:创建对象,注重创建对象的细节,运用于创建复杂对象或者复合对象
- 实例:对有name,age,work的简历进行整理录入,对姓和名进行分别整理,对工种进行翻译输出,新增描述description,如果是工程师,描述为热爱编程,如果是老师为乐于分享,否则描述为无,修改工种,修改描述
- 练习代码:
let data = [
{
name:'zhang san',
age:19,
work:'engineer'
},
{
name:'li si',
age:30,
work: 'teacher'
},
{
name:'wang wu',
age:27,
work:'xxx'
}
];
//创建对象归类姓名、年龄、姓、名,实例化work对象的work名称、work描述、work方法
function Candidate(param){
var _candidate = {};
_candidate.name = param.name;
_candidate.age = param.age;
_candidate.firstName = param.name.split(' ')[0];
_candidate.secondName = param.name.split(' ')[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;
}
return _candidate;
}
//批量调用
var candidateArr = [];
for (var i=0;i<data.length;i++){
candidateArr[i] = Candidate(data[i]);
}
console.log(Candidate(data[0]))
console.log(candidateArr[0])
Candidate(data[0]).work.changeWork('无业游民');
candidateArr[0].work.changeWork('待业人员')
let _candidate1 =Candidate(data[0]);
_candidate1.work.changeWork('暂无');
console.log(_candidate1)
-
打印结果简单明了,自行总结
-
也可将Candidate函数内部进行再封装
function Candidate(param){
let _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.split(' ')[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 = '暂无描述';
}
this.changeWork = function (newWork) {
this.name = newWork;
}
}
var candidateArr = [];
for (var i=0;i<data.length;i++){
candidateArr[i] = Candidate(data[i]);
}
candidateArr[0].work.changeWork('新工作')
console.log(candidateArr[0])