File tree Expand file tree Collapse file tree 2 files changed +76
-44
lines changed Expand file tree Collapse file tree 2 files changed +76
-44
lines changed Original file line number Diff line number Diff line change 11namespace 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 ;
407 }
418
429 export class User {
@@ -55,15 +22,79 @@ namespace BuilderPattern {
5522 get Name ( ) {
5623 return this . name ;
5724 }
25+
5826 get Age ( ) {
5927 return this . age ;
6028 }
29+
6130 get Phone ( ) {
6231 return this . phone ;
6332 }
33+
6434 get Address ( ) {
6535 return this . address ;
6636 }
37+
6738 }
6839
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+ }
69100}
Original file line number Diff line number Diff line change 33namespace BuilderPattern {
44 export namespace Demo {
55 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 ) ;
1213 }
1314 }
1415}
You can’t perform that action at this time.
0 commit comments