Skip to content

Commit 5f9beda

Browse files
new approach for builder pattern
1 parent 00fff1c commit 5f9beda

File tree

2 files changed

+76
-44
lines changed

2 files changed

+76
-44
lines changed

builder/builder.ts

Lines changed: 69 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,9 @@
11
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;
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
}

builder/demo.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
namespace 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
}

0 commit comments

Comments
 (0)