728x90
반응형
빌더 인터페이스 만들기
import java.time.LocalDate;
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);
TourPlanBuilder getPlan();
}
- 이렇게 인터페이스에 여러개의 메소드를 저의한다.
- 그리고 마지막에 getPlan을 생성함
- 이 곳에서 만약에 nights를 설정했는데 days를 설정안했네를 확인해서
- 값을 검증하는 것 , 인터페이스를 검증하는 위치임
package me.whiteship.designpatterns._01_creational_patterns._04_builder._01_before;
import java.time.LocalDate;
public class DefaultTourBuilder implements TourPlanBuilder {
public TourPlanBuilder nightsAndDays(int nights, int days) {
return null;
}
public TourPlanBuilder title(String title) {
return null;
}
public TourPlanBuilder startDate(LocalDate localDate) {
return null;
}
public TourPlanBuilder whereToStay(String whereToStay) {
return null;
}
public TourPlanBuilder addPlan(int day, String plan) {
return null;
}
public TourPlanBuilder getPlan() {
return null;
}
}
- 구현하기
package me.whiteship.designpatterns._01_creational_patterns._04_builder._02_after;
import me.whiteship.designpatterns._01_creational_patterns._04_builder._01_before.DetailPlan;
import me.whiteship.designpatterns._01_creational_patterns._04_builder._01_before.TourPlan;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class DefaultTourBuilder implements TourPlanBuilder {
private String title;
private int nights;
private int days;
private LocalDate startDate;
private String whereToStay;
private List<DetailPlan> plans;
@Override
public TourPlanBuilder nightsAndDays(int nights, int days) {
this.nights = nights;
this.days = days;
return this;
}
@Override
public TourPlanBuilder title(String title) {
this.title = title;
return this;
}
@Override
public TourPlanBuilder startDate(LocalDate startDate) {
this.startDate = startDate;
return this;
}
@Override
public TourPlanBuilder whereToStay(String whereToStay) {
this.whereToStay = whereToStay;
return this;
}
@Override
public TourPlanBuilder addPlan(int day, String plan) {
if (this.plans == null) {
this.plans = new ArrayList<>();
}
this.plans.add(new DetailPlan(day, plan));
return this;
}
@Override
public TourPlan getPlan() {
return new TourPlan(title, nights, days, startDate, whereToStay, plans);
}
}
- 항상 하던대로 하지만 마지막 getPlan에서 저렇게 인스턴스를 넘김
App | 클라이언트 부분
public class App{
public static void main(String[] args){
TourPlanBuilder builder = new DefaultTourBuilder();
builder.title("칸쿤 여행");
builder.nightAndDays(2,3);
}
}
- 위에 처럼 할 수 도 있지만
- 빌더 타입이기 때문에
public class App{
public static void main(String[] args){
TourPlanBuilder builder = new DefaultTourBuilder();
builder.title("칸쿤 여행")
.nightAndDays(2,3)
.startDate(LocalDate.of(2020,12,9))
.whereToStay("리조트")
.addPlan("리조트")
.addPlan(0,"체크인하고 짐 풀기")
.getPlan();
}
}
- 위와 같이 구현 할 수 있음
TourPlan longBeachTrip = builder.title("롱비치")
.startDate(LocalDate.of(2021,7,15))
.getPlan();
- 이렇게 가능하다.
- 이렇게 하면 생성자에서는 null값을 넣어서 해야겠지만 그럴 필요가 없음
- 자주 반복되는 경우는 디렉터를 이용해서 사용하는 법이 있음
디렉터 사용
package me.whiteship.designpatterns._01_creational_patterns._04_builder._01_before;
public class TourDirector {
//빌더를 이용해서 생성
private TourPlanBuilder tourPlanBuilder;
public TourPlanBuilder(TourPlanBuilder tourPlanBuilder){
this.tourPlanBuilder = tourPlanBuilder;
}
}
- 이렇게 우선 생성하고 아래 자주 사용하는 것 넣기
package me.whiteship.designpatterns._01_creational_patterns._04_builder._02_after;
import me.whiteship.designpatterns._01_creational_patterns._04_builder._01_before.TourPlan;
import java.time.LocalDate;
public class TourDirector {
private TourPlanBuilder tourPlanBuilder;
public TourDirector(TourPlanBuilder tourPlanBuilder) {
this.tourPlanBuilder = tourPlanBuilder;
}
public TourPlan cancunTrip() {
return tourPlanBuilder.title("칸쿤 여행")
.nightsAndDays(2, 3)
.startDate(LocalDate.of(2020, 12, 9))
.whereToStay("리조트")
.addPlan(0, "체크인하고 짐 풀기")
.addPlan(0, "저녁 식사")
.getPlan();
}
public TourPlan longBeachTrip() {
return tourPlanBuilder.title("롱비치")
.startDate(LocalDate.of(2021, 7, 15))
.getPlan();
}
}
- 이렇게 넣어주고나서
public class App{
public static void main(String[] args){
TourDirector dirctor = new TourDirector(new DefaultTourBilder());
TourPlan tourPlan = director.cancunTrip();
TourPlan tourPlan1 = director.lonBeachTrip();
}
}
- 이렇게 간단히 사용할 수 있음
728x90
반응형
'CS Study > 디자인패턴' 카테고리의 다른 글
2021.11.29_빌더패턴04.자바와스프링에서찾아보는패턴 (0) | 2021.11.29 |
---|---|
2021.11.29_빌더패턴03.장점과단점 (0) | 2021.11.29 |
2021.11.27_빌더패턴01.패턴소개 (0) | 2021.11.27 |
2021.11.21_추상팩토리패턴04.자바와스프링에서찾아보는패턴 (0) | 2021.11.21 |
2021.11.21_추상팩토리패턴03.장단점 (0) | 2021.11.21 |
댓글