동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 생성하는 패턴
(복잡한) 객체를 만드는 프로세스를 독립적으로 분리할 수 있다.

/**
* 여행 일정
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class TourPlan {
private String title;
private int nights;
private int days;
private LocalDate startDate;
private String whereToStay;
private List<DetailPlan> plans;
}
/**
* 여행 세부 계획
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class DetailPlan {
private int day;
private String plan;
}
public class App {
public static void main(String[] args) {
TourPlan shortTrip = new TourPlan("오레곤 롱비치", LocalDate.of(2021,7,15));
TourPlan tourPlan = new TourPlan();
tourPlan.setTitle("칸쿤 여행");
tourPlan.setNights(2);
tourPlan.setDays(3);
tourPlan.setStartDate(LocalDate.of(2020, 12, 9));
tourPlan.setWhereToStay("리조트");
tourPlan.getPlans().add(new DetailPlan(0, "체크인 이후 잠 풀기"));
tourPlan.getPlans().add(new DetailPlan(0, "저녁 식사"));
tourPlan.getPlans().add(new DetailPlan(1, "조식 부페에서 식사"));
tourPlan.getPlans().add(new DetailPlan(1, "해변가 산책"));
tourPlan.getPlans().add(new DetailPlan(1, "점심은 햄버거 먹기"));
tourPlan.getPlans().add(new DetailPlan(1, "리조트 수영장에서 놀기"));
tourPlan.getPlans().add(new DetailPlan(1, "저녁은 BBQ 식당에서 스테이크"));
tourPlan.getPlans().add(new DetailPlan(2, "조식은 부페에서 식사"));
tourPlan.getPlans().add(new DetailPlan(2, "체크아웃"));
}
}