Skip to content

Commit

Permalink
new approach for builder pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
miladvafaeifard committed Oct 16, 2018
1 parent 00fff1c commit 5530529
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 30 deletions.
79 changes: 55 additions & 24 deletions builder/builder.ts
Original file line number Diff line number Diff line change
@@ -1,69 +1,100 @@
namespace BuilderPattern {
export class UserBuilder {
export interface Builder<T> {
setAge?(value: number): void;
setPhone?(value: string): void;
setAddress?(value: string): void;
build(): T;
}

export class User {
private name: string;
private age: number;
private phone: string;
private address: string;

constructor(name: string) {
this.name = name;
constructor(builder: UserBuilder) {
this.name = builder.Name;
this.age = builder.Age;
this.phone = builder.Phone;
this.address = builder.Address
}

get Name() {
return this.name;
}
setAge(value: number): UserBuilder {
this.age = value;
return this;
}

get Age() {
return this.age;
}
setPhone(value: string): UserBuilder {
this.phone = value;
return this;
}

get Phone() {
return this.phone;
}
setAddress(value: string): UserBuilder {
this.address = value;
return this;
}

get Address() {
return this.address;
}

build(): User {
return new User(this);
}
}

export class User {
export class UserBuilder implements Builder<User> {
private name: string;
private age: number;
private phone: string;
private address: string;

constructor(builder: UserBuilder) {
this.name = builder.Name;
this.age = builder.Age;
this.phone = builder.Phone;
this.address = builder.Address
constructor(name: string) {
this.name = name;
}

get Name() {
return this.name;
}
setAge(value: number): UserBuilder {
this.age = value;
return this;
}
get Age() {
return this.age;
}
setPhone(value: string): UserBuilder {
this.phone = value;
return this;
}
get Phone() {
return this.phone;
}
setAddress(value: string): UserBuilder {
this.address = value;
return this;
}
get Address() {
return this.address;
}

getUser(){
return this;
}

build(): User {
return new User(this);
}
}

export class Director {
constructor(private userbuilder: UserBuilder){}

makeUser() {
if(this.userbuilder.Name === 'Jancsi') {
this.userbuilder.setAge(12)
.setPhone("0123456789")
.setAddress("asdf");
} else {
this.userbuilder.setAge(0)
.setPhone("xxxxxxxxx")
.setAddress("xxxx");
}
}

}
}
13 changes: 7 additions & 6 deletions builder/demo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
namespace BuilderPattern {
export namespace Demo {
export function show() : void {
var u: BuilderPattern.User = new BuilderPattern.UserBuilder("Jancsi")
.setAge(12)
.setPhone("0123456789")
.setAddress("asdf")
.build();
console.log(u.Name + " " + u.Age + " " + u.Phone + " " + u.Address);
let userBuilder: BuilderPattern.UserBuilder = new BuilderPattern.UserBuilder("Jancsi")

let director: BuilderPattern.Director = new BuilderPattern.Director(userBuilder);
director.makeUser();

let user: BuilderPattern.User = userBuilder.build();
console.log(user.Name + " " + user.Age + " " + user.Phone + " " + user.Address);
}
}
}
Expand Down

0 comments on commit 5530529

Please sign in to comment.