public class Product {
private String attribute1;
private String attribute2;
public void setAttribute1(String value) {
this.attribute1 = value;
}
public void setAttribute2(String value) {
this.attribute2 = value;
}
// other methods
}
public interface Builder {
void buildAttribute1(String value);
void buildAttribute2(String value);
Product getProduct();
}
public class ConcreteBuilder implements Builder {
private Product product;
public ConcreteBuilder() {
this.product = new Product();
}
public void buildAttribute1(String value) {
this.product.setAttribute1(value);
}
public void buildAttribute2(String value) {
this.product.setAttribute2(value);
}
public Product getProduct() {
return this.product;
}
}
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public void construct() {
builder.buildAttribute1("value1");
builder.buildAttribute2("value2");
}
}
public class Main {
public static void main(String[] args) {
Builder builder = new ConcreteBuilder();
Director director = new Director(builder);
director.construct();
Product product = builder.getProduct();
// ...
}
}