|
1 | 1 | namespace BuilderPattern { |
2 | | - export class UserBuilder { |
| 2 | + export interface Builder<T> { |
| 3 | + setAge?(value: number): void; |
| 4 | + setPhone?(value: string): void; |
| 5 | + setAddress?(value: string): void; |
| 6 | + build(): T; |
| 7 | + } |
| 8 | + |
| 9 | + export class User { |
3 | 10 | private name: string; |
4 | 11 | private age: number; |
5 | 12 | private phone: string; |
6 | 13 | private address: string; |
7 | 14 |
|
8 | | - constructor(name: string) { |
9 | | - this.name = name; |
| 15 | + constructor(builder: UserBuilder) { |
| 16 | + this.name = builder.Name; |
| 17 | + this.age = builder.Age; |
| 18 | + this.phone = builder.Phone; |
| 19 | + this.address = builder.Address |
10 | 20 | } |
11 | 21 |
|
12 | 22 | get Name() { |
13 | 23 | return this.name; |
14 | 24 | } |
15 | | - setAge(value: number): UserBuilder { |
16 | | - this.age = value; |
17 | | - return this; |
18 | | - } |
| 25 | + |
19 | 26 | get Age() { |
20 | 27 | return this.age; |
21 | 28 | } |
22 | | - setPhone(value: string): UserBuilder { |
23 | | - this.phone = value; |
24 | | - return this; |
25 | | - } |
| 29 | + |
26 | 30 | get Phone() { |
27 | 31 | return this.phone; |
28 | 32 | } |
29 | | - setAddress(value: string): UserBuilder { |
30 | | - this.address = value; |
31 | | - return this; |
32 | | - } |
| 33 | + |
33 | 34 | get Address() { |
34 | 35 | return this.address; |
35 | 36 | } |
36 | 37 |
|
37 | | - build(): User { |
38 | | - return new User(this); |
39 | | - } |
40 | 38 | } |
41 | 39 |
|
42 | | - export class User { |
| 40 | + export class UserBuilder implements Builder<User> { |
43 | 41 | private name: string; |
44 | 42 | private age: number; |
45 | 43 | private phone: string; |
46 | 44 | private address: string; |
47 | 45 |
|
48 | | - constructor(builder: UserBuilder) { |
49 | | - this.name = builder.Name; |
50 | | - this.age = builder.Age; |
51 | | - this.phone = builder.Phone; |
52 | | - this.address = builder.Address |
| 46 | + constructor(name: string) { |
| 47 | + this.name = name; |
53 | 48 | } |
54 | 49 |
|
55 | 50 | get Name() { |
56 | 51 | return this.name; |
57 | 52 | } |
| 53 | + setAge(value: number): UserBuilder { |
| 54 | + this.age = value; |
| 55 | + return this; |
| 56 | + } |
58 | 57 | get Age() { |
59 | 58 | return this.age; |
60 | 59 | } |
| 60 | + setPhone(value: string): UserBuilder { |
| 61 | + this.phone = value; |
| 62 | + return this; |
| 63 | + } |
61 | 64 | get Phone() { |
62 | 65 | return this.phone; |
63 | 66 | } |
| 67 | + setAddress(value: string): UserBuilder { |
| 68 | + this.address = value; |
| 69 | + return this; |
| 70 | + } |
64 | 71 | get Address() { |
65 | 72 | return this.address; |
66 | 73 | } |
| 74 | + |
| 75 | + getUser(){ |
| 76 | + return this; |
| 77 | + } |
| 78 | + |
| 79 | + build(): User { |
| 80 | + return new User(this); |
| 81 | + } |
67 | 82 | } |
68 | 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 | + this.userbuilder.build(); |
| 99 | + } |
| 100 | + |
| 101 | + } |
69 | 102 | } |
0 commit comments