建造者模式
- 建造者模式注重创建对象的细节,使用这种模式创建出的复杂对象或者复合对象结构会非常清晰
 - 举个例子:比如有一家招聘中介公司,现在有一批纸质简历或者简历数据信息,为了做成统一的电子版简历,我们需要将这些信息进行整理,我们该怎么去做
 
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);