빌더 패턴

- 필드 초기화를 일관성 있게 하는 API를 제공
- 인스턴스를 생성할 때 필수 초기화 요소와 선택 초기화 요소가 함께 있는 경우, 초기화에 필요한 요소를 간편하고 가독성 있게 관리
- 필드가 많아져도 필요한 초기화를 강제하여 완전한 인스턴스 생성 보장
- 인스턴스 유형에 따라 값을 미리 구성해둔 인스턴스를 생성해서 사용하고 싶은 경우 → Director
구현하기
Product
public class TourPlan {
private String title;
private int nights;
private int days;
private LocalDate startDate;
private String whereToStay;
private List<DetailPlan> plans;
public TourPlan() {
}
public TourPlan(String title, int nights, int days, LocalDate startDate, String whereToStay, List<DetailPlan> plans) {
this.title = title;
this.nights = nights;
this.days = days;
this.startDate = startDate;
this.whereToStay = whereToStay;
this.plans = plans;
}
}
Builder Interface
public interface TourPlanBuilder {
TourPlanBuilder nightsAndDays(int nights, int days);
TourPlanBuilder title(String title);
TourPlanBuilder startDate(LocalDate localDate);
TourPlanBuilder whereToStay(String whereToStay);
TourPlanBuilder addPlan(int day, String plan);
TourPlan getPlan();
}
Concrete Builder