class Builder {
public build() {
return new Product();
}
}
class Product {
constructor(private partA: string, private partB: string) {}
}
class Director {
public build(builder: Builder) {
builder.buildPartA();
builder.buildPartB();
}
}
class ConcreteBuilder extends Builder {
private product: Product;
public buildPartA() {
this.product.partA = 'Part A';
}
public buildPartB() {
this.product.partB = 'Part B';
}
public getProduct() {
const product = this.product;
this.reset();
return product;
}
public reset() {
this.product = new Product('', '');
}
}
const builder = new ConcreteBuilder();
const director = new Director();
director.build(builder);
const product = new Product('Part A', 'Part B');
const newProduct = builder.getProduct();