Director class를 이용해 객체 생성을 client 에서는 숨길수 있다.
Director역할.
package builder.after;
import java.time.LocalDate;
public class TourDirector {
//빌더를 이용한 객체 생성 팩토리 역할 (Director)
//클라이언트에서는 객체생성 부분을 숨김수 있음.
TourPlanBuilder builder = new DefaultTourBuilder();
public TourPlan koreaTrip() {
return builder.title("한국")
.startDate(LocalDate.of(2022, 1, 1))
.getPlan();
}
public TourPlan cancunTrip() {
return builder.title("칸쿤")
.startDate(LocalDate.of(2022, 1, 1))
.addPlan(1, "체크인")
.addPlan(2, "요트투어")
.whereStay("호텔")
.getPlan();
}
}
Client
public class App {
public static void main(String[] args) {
//여러 생성자를 만들 필요없이 builder를 통해 원하는 만큼의 값 세팅이 가능.
TourDirector tourDirector = new TourDirector();
tourDirector.koreaTrip();
tourDirector.cancunTrip();
}
}
장점
- 복잡한 객체를 만들때 빌더 패턴을 이용하여 만들 수 있다. (여러 생성자의 생성 및 복잡한 파라메터등)
- 생성자를 이용하여 객체를 만들게 되면, 생성자가 파라메터가 복잡해질 경우 순서 및 파라메터가 무엇인지에 대한 어려움,
- 생성자에 파라메터가 추가된다면? 사용하고 있는 모든클래스에 대해 수정이 일어남.
- 필요한 데이터만 설정 가능,
- 코드 가독성
- 클라이언트 소스 수정안해도됨.
하지만 lombok 을 사용한다면 저렇게 복잡하게 인터페이스 만들고, 빌더 를 만들지 않아도된다.
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@ToString
public class TourPlanLombok {
private String title;
private LocalDate startDate;
private String stay;
private int day;
private String msg;
private String plan;
}
전체 소스코드 참고
https://github.com/kalkin2/designPattern2208/tree/main/src/builder
'개발이슈 > 디자인패턴' 카테고리의 다른 글
멀티스레드 환경에서 안전한 Step Builder 패턴 이해하기 (0) | 2023.11.25 |
---|---|
step builder pattern (스텝빌더 패턴) (0) | 2023.08.28 |
추상 팩토리 (Abstract factory) 패턴 (0) | 2022.08.31 |
팩토리 메소드 패턴2 (factory method pattern) (0) | 2022.08.29 |
팩토리 메소드 패턴1 (factory method pattern) (0) | 2013.11.12 |