public class ComplexObject {
private String property1;
private int property2;
private OtherObject property3;
@Override
public String toString() {
return "ComplexObject [property1=" + property1 + ", property2=" + property2 + ", property3=" + property3 + "]";
}
}
public interface ObjectBuilder {
ObjectBuilder setProperty1(String value);
ObjectBuilder setProperty2(int value);
ObjectBuilder setProperty3(OtherObject value);
ComplexObject build();
}
public class ConcreteBuilder implements ObjectBuilder {
private ComplexObject object;
public ConcreteBuilder() {
this.object = new ComplexObject();
}
@Override
public ObjectBuilder setProperty1(String value) {
object.setProperty1(value);
return this;
}
@Override
public ObjectBuilder setProperty2(int value) {
object.setProperty2(value);
return this;
}
@Override
public ObjectBuilder setProperty3(OtherObject value) {
object.setProperty3(value);
return this;
}
@Override
public ComplexObject build() {
return object;
}
}
public class Director {
private ObjectBuilder builder;
public Director(ObjectBuilder builder) {
this.builder = builder;
}
public ComplexObject construct() {
return builder.setProperty1("value1")
.setProperty2(2)
.setProperty3(new OtherObject())
.build();
}
}
public class Main {
public static void main(String[] args) {
ObjectBuilder builder = new ConcreteBuilder();
Director director = new Director(builder);
ComplexObject object = director.construct();
System.out.println(object);
}
}