점층적 생성자 패턴으로 인스턴스를 만들려면 사용자가 사용시 헷갈릴 뿐만 아니라, 매개변수가 점점 많아질수록 클라이언트 코드를 읽거나 사용하기가 점점 더 어려워진다.
Setter를 이용한 Java Beans 패턴으로 대체할 수 있겠지만, 객체 완성 전까지 일관성이 유지되지 못하고 객체 생성을 위해 메서드를 여러 개 호출해야 한다는 문제점이 있다.
필수 매개변수 만으로 생성자를 호출해 객체를 얻을 수 있다.
public class A {
private final int cost;
private final int amount;
public static class Builder {
private int cost = 0;
private int amount = 0;
public Builder() {
}
public Builder cost(int cost){
this.cost = cost;
return this;
}
public Builder amount(int amount){
this.amount = amount;
return this;
}
public A build() {
return new A(this);
}
}
private A(Builder builder) {
this.cost = builder.cost;
this.amount = builder.amount;
}
}
A a = new A.Builder()
.cost(10)
.amount(10)
.build();