public class BuildDesignPattern {
public static void main(String[] args) {
Director director = new Director(new ConcreteBuilder());
Product product = director.create();
product.display();
}
}
class Product {
private String partA;
private String partB;
private String partC;
public String getPartA() {
return partA;
}
public void setPartA(String partA) {
this.partA = partA;
}
public String getPartB() {
return partB;
}
public void setPartB(String partB) {
this.partB = partB;
}
public String getPartC() {
return partC;
}
public void setPartC(String partC) {
this.partC = partC;
}
public void display() {
System.out.println("Product{" +
"partA='" + partA + ''' +
", partB='" + partB + ''' +
", partC='" + partC + ''' +
'}');
}
}
abstract class Builder {
protected Product product = new Product();
public abstract void partA();
public abstract void partB();
public abstract void partC();
public abstract Product create();
}
class ConcreteBuilder extends Builder {
@Override
public void partA() {
product.setPartA("partA");
}
@Override
public void partB() {
product.setPartB("partB");
}
@Override
public void partC() {
product.setPartC("partC");
}
@Override
public Product create() {
return product;
}
}
class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product create() {
builder.partA();
builder.partB();
builder.partC();
return builder.create();
}
}