# 建造者模式
- 定义:注重创建对象的细节,用于创建出复杂对象或者复合对象
- 例子
var data = [
{
name: 'zhang san',
age: 23,
work: 'engineer'
},
...
]
// 普通写法
function Candidate(param){
var _candidate = {}
_candidate.name = param.name
_candidate.age = param.age
_candidate.firstName = _candidate.name.split(' ')[0]
_candidate.secondName = _candidate.name.split(' ')[1]
switch(param.work){
case 'engineer':
_candidate.work.name = '工程师'
_candidate.work.desc = '热爱编程'
break;
...
default:
_candidate.work.name = param.work
_candidate.work.desc = '无'
break;
}
_candidate.work.changeWork = function(work){
this.name = work
}
_candidate.work.changeDesc = function(desc){
this.desc = desc
}
var candidateArr = []
for(var i = 0; i < data.lenght; i++){
candidateArr[i] = Candidate(data[i])
}
console.log(candidateArr)
/*
console.log(candidateArr[0])
输出;
Object
age:23
firstName:"zhang"
name:"zhang san"
secondName:"san"
work:
changeDes:f(des)
changeWork:f(work)
description:"热爱编程"
name:"工程师"
_proto_:Object
_proto_:Object
*/
candidateArr[0].work.changeWork('xxx')
}
// 建造者模式,最外层只有4行代码;将对象再进行封装,抽象CreateName类,CreateWork类,这样就创建了复杂的类
function Candidate(param){
var _candidate = new Person(param)
_candidate.name = new CreateName(param.name)
_candidate.eork = 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.desc = '热爱编程'
break;
...
default:
this.name = work
this.desc = '无'
break;
}
}
CreateWork.prototype.changeWork = function(work){
this.name = work
}
CreateWork.prototype.changeDesc = function(desc){
this.desc = desc
}
var candidateArr = []
for(var i = 0; i < data.lenght; i++){
candidateArr[i] = Candidate(data[i])
}
console.log(candidateArr)
candidateArr[0].work.changeWork('xxx')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102