|
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 | + |
| 99 | + } |
69 | 100 | }
|
0 commit comments