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