Skip to content

Commit 5530529

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

File tree

2 files changed

+62
-30
lines changed

2 files changed

+62
-30
lines changed

builder/builder.ts

+55-24
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,100 @@
11
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 {
310
private name: string;
411
private age: number;
512
private phone: string;
613
private address: string;
714

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
1020
}
1121

1222
get Name() {
1323
return this.name;
1424
}
15-
setAge(value: number): UserBuilder {
16-
this.age = value;
17-
return this;
18-
}
25+
1926
get Age() {
2027
return this.age;
2128
}
22-
setPhone(value: string): UserBuilder {
23-
this.phone = value;
24-
return this;
25-
}
29+
2630
get Phone() {
2731
return this.phone;
2832
}
29-
setAddress(value: string): UserBuilder {
30-
this.address = value;
31-
return this;
32-
}
33+
3334
get Address() {
3435
return this.address;
3536
}
3637

37-
build(): User {
38-
return new User(this);
39-
}
4038
}
4139

42-
export class User {
40+
export class UserBuilder implements Builder<User> {
4341
private name: string;
4442
private age: number;
4543
private phone: string;
4644
private address: string;
4745

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;
5348
}
5449

5550
get Name() {
5651
return this.name;
5752
}
53+
setAge(value: number): UserBuilder {
54+
this.age = value;
55+
return this;
56+
}
5857
get Age() {
5958
return this.age;
6059
}
60+
setPhone(value: string): UserBuilder {
61+
this.phone = value;
62+
return this;
63+
}
6164
get Phone() {
6265
return this.phone;
6366
}
67+
setAddress(value: string): UserBuilder {
68+
this.address = value;
69+
return this;
70+
}
6471
get Address() {
6572
return this.address;
6673
}
74+
75+
getUser(){
76+
return this;
77+
}
78+
79+
build(): User {
80+
return new User(this);
81+
}
6782
}
6883

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

+7-6
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.build();
12+
console.log(user.Name + " " + user.Age + " " + user.Phone + " " + user.Address);
1213
}
1314
}
1415
}

0 commit comments

Comments
 (0)