File tree 2 files changed +76
-44
lines changed
2 files changed +76
-44
lines changed Original file line number Diff line number Diff line change 1
1
namespace BuilderPattern {
2
- export class UserBuilder {
3
- private name : string ;
4
- private age : number ;
5
- private phone : string ;
6
- private address : string ;
7
-
8
- constructor ( name : string ) {
9
- this . name = name ;
10
- }
11
-
12
- get Name ( ) {
13
- return this . name ;
14
- }
15
- setAge ( value : number ) : UserBuilder {
16
- this . age = value ;
17
- return this ;
18
- }
19
- get Age ( ) {
20
- return this . age ;
21
- }
22
- setPhone ( value : string ) : UserBuilder {
23
- this . phone = value ;
24
- return this ;
25
- }
26
- get Phone ( ) {
27
- return this . phone ;
28
- }
29
- setAddress ( value : string ) : UserBuilder {
30
- this . address = value ;
31
- return this ;
32
- }
33
- get Address ( ) {
34
- return this . address ;
35
- }
36
-
37
- build ( ) : User {
38
- return new User ( this ) ;
39
- }
2
+ export interface Builder < T > {
3
+ setAge ?( value : number ) : void ;
4
+ setPhone ?( value : string ) : void ;
5
+ setAddress ?( value : string ) : void ;
6
+ getResult ( ) : T ;
40
7
}
41
8
42
9
export class User {
@@ -55,15 +22,79 @@ namespace BuilderPattern {
55
22
get Name ( ) {
56
23
return this . name ;
57
24
}
25
+
58
26
get Age ( ) {
59
27
return this . age ;
60
28
}
29
+
61
30
get Phone ( ) {
62
31
return this . phone ;
63
32
}
33
+
64
34
get Address ( ) {
65
35
return this . address ;
66
36
}
37
+
67
38
}
68
39
40
+ export class UserBuilder implements Builder < User > {
41
+ private name : string ;
42
+ private age : number ;
43
+ private phone : string ;
44
+ private address : string ;
45
+
46
+ constructor ( name : string ) {
47
+ this . name = name ;
48
+ }
49
+
50
+ get Name ( ) {
51
+ return this . name ;
52
+ }
53
+ setAge ( value : number ) : UserBuilder {
54
+ this . age = value ;
55
+ return this ;
56
+ }
57
+ get Age ( ) {
58
+ return this . age ;
59
+ }
60
+ setPhone ( value : string ) : UserBuilder {
61
+ this . phone = value ;
62
+ return this ;
63
+ }
64
+ get Phone ( ) {
65
+ return this . phone ;
66
+ }
67
+ setAddress ( value : string ) : UserBuilder {
68
+ this . address = value ;
69
+ return this ;
70
+ }
71
+ get Address ( ) {
72
+ return this . address ;
73
+ }
74
+
75
+ getUser ( ) {
76
+ return this ;
77
+ }
78
+
79
+ getResult ( ) : User {
80
+ return new User ( this ) ;
81
+ }
82
+ }
83
+
84
+ export class Director {
85
+ constructor ( private userbuilder : UserBuilder ) { }
86
+
87
+ makeUser ( ) {
88
+ if ( this . userbuilder . Name === 'Jancsi' ) {
89
+ this . userbuilder . setAge ( 12 )
90
+ . setPhone ( "0123456789" )
91
+ . setAddress ( "asdf" ) ;
92
+ } else {
93
+ this . userbuilder . setAge ( 0 )
94
+ . setPhone ( "xxxxxxxxx" )
95
+ . setAddress ( "xxxx" ) ;
96
+ }
97
+ }
98
+
99
+ }
69
100
}
Original file line number Diff line number Diff line change 3
3
namespace BuilderPattern {
4
4
export namespace Demo {
5
5
export function show ( ) : void {
6
- var u : BuilderPattern . User = new BuilderPattern . UserBuilder ( "Jancsi" )
7
- . setAge ( 12 )
8
- . setPhone ( "0123456789" )
9
- . setAddress ( "asdf" )
10
- . build ( ) ;
11
- console . log ( u . Name + " " + u . Age + " " + u . Phone + " " + u . Address ) ;
6
+ let userBuilder : BuilderPattern . UserBuilder = new BuilderPattern . UserBuilder ( "Jancsi" )
7
+
8
+ let director : BuilderPattern . Director = new BuilderPattern . Director ( userBuilder ) ;
9
+ director . makeUser ( ) ;
10
+
11
+ let user : BuilderPattern . User = userBuilder . getResult ( ) ;
12
+ console . log ( user . Name + " " + user . Age + " " + user . Phone + " " + user . Address ) ;
12
13
}
13
14
}
14
15
}
You can’t perform that action at this time.
0 commit comments