"효과적인 Java"에서 다루는 "작성자 패턴"에 관한 질문이 있습니다. 패턴을 올바르게 구현하려면 .build()
메서드가 필요합니까?작성자 패턴에 .build() 메소드가 필요합니까?
public class CoffeeDrink {
private int numEspressoShots;
private short milkType;
private boolean withWhip;
private CoffeeDrink() {
}
public static CoffeeDrink buildNewDrink() {
return new CoffeeDrink();
}
public CoffeeDrink withEspresso(int n) {
this.numEspressoShots = n;
return this;
}
public CoffeeDrink withMilkType(shot t) {
this.milkType = t;
return this;
}
public CoffeeDrink withWhip() {
this.withWhip = true;
return this;
}
}
그리고 우리가 그것을 사용하는 방법 : 나는 정적 내부 Builder
클래스가없는 경우
CoffeeDrink c = CoffeeDrink.buildNewDrink()
.withEspresso(2)
.withMilkType(2)
.withWhip();
이 여전히 유효겠습니까 예를 들어, 우리는 다음과 같은 클래스가 있다고 가정 해 봅시다? 이점 중 하나는 메서드 .build()
이 호출 될 때까지 새로운 CoffeeDrink
개체를 만드는 것을 보류하고 있지만 여전히 Builder
개체를 생성하고 있다는 것입니다. 그냥 몇 가지 설명을 구하십시오.
빌더 패턴 불변 클래스에 큰 장점을 사용한다. 그들과 함께 빌더는 최종 제품의 궁극적 인 구성을 지원하는 가변적 인 "도우미"클래스이며 이후에는 변경되지 않습니다. 귀하의 예제는 단순한 POJO 일 뿐이며 JavaBeans의 단점 (변경 가능, 불완전하거나 일관성없는 상태에서 볼 수 있음 등)을 공유합니다. – scottb