diff --git a/design-pattern/gof/src/builder/after/App.java b/design-pattern/gof/src/builder/after/App.java new file mode 100644 index 00000000..8681ea95 --- /dev/null +++ b/design-pattern/gof/src/builder/after/App.java @@ -0,0 +1,27 @@ +package builder.after; + +import java.time.LocalDate; + +public class App { + + public static void main(String[] args) throws InstantiationException, IllegalAccessException { +// TourPlanBuilder builder = new DefaultTourBuilder(); +// TourPlan plan = builder.title("칸쿤 여행") +// .nightsAndDays(2, 3) +// .startDate(LocalDate.of(2021, 12, 24)) +// .whereToStay("리조트") +// .addPlan(0, "체크인 하고 짐 풀기") +// .addPlan(0, "저녁 식사") +// .getPlan(); +// +// TourPlan longBeachTrip = builder.title("롱비치") +// .startDate(LocalDate.of(2022, 1, 1)) +// .getPlan(); + TourDirector director = new TourDirector(new DefaultTourBuilder()); + TourPlan tourPlan = director.cancunTrip(); + TourPlan tourPlan1 = director.longBeachTrip(); + + System.out.println("tourPlan = " + tourPlan); + System.out.println("tourPlan1 = " + tourPlan1); + } +} diff --git a/design-pattern/gof/src/builder/after/DefaultTourBuilder.java b/design-pattern/gof/src/builder/after/DefaultTourBuilder.java new file mode 100644 index 00000000..c07dd1bd --- /dev/null +++ b/design-pattern/gof/src/builder/after/DefaultTourBuilder.java @@ -0,0 +1,54 @@ +package builder.after; + +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 plans; + + @Override + public TourPlanBuilder title(String title) { + this.title = title; + return this; + } + + @Override + public TourPlanBuilder nightsAndDays(int nights, int days) { + this.nights = nights; + this.days = days; + 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) { + 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); + } +} diff --git a/design-pattern/gof/src/builder/after/DetailPlan.java b/design-pattern/gof/src/builder/after/DetailPlan.java new file mode 100644 index 00000000..6ad818a8 --- /dev/null +++ b/design-pattern/gof/src/builder/after/DetailPlan.java @@ -0,0 +1,37 @@ +package builder.after; + +public class DetailPlan { + + private int day; + + private String plan; + + public DetailPlan(int day, String plan) { + this.day = day; + this.plan = plan; + } + + public int getDay() { + return day; + } + + public void setDay(int day) { + this.day = day; + } + + public String getPlan() { + return plan; + } + + public void setPlan(String plan) { + this.plan = plan; + } + + @Override + public String toString() { + return "DetailPlan{" + + "day=" + day + + ", plan='" + plan + '\'' + + '}'; + } +} diff --git a/design-pattern/gof/src/builder/after/TourDirector.java b/design-pattern/gof/src/builder/after/TourDirector.java new file mode 100644 index 00000000..e7a8d6a2 --- /dev/null +++ b/design-pattern/gof/src/builder/after/TourDirector.java @@ -0,0 +1,30 @@ +package builder.after; + +import java.time.LocalDate; + +public class TourDirector { + + private final TourPlanBuilder tourPlanBuilder; + + public TourDirector(TourPlanBuilder tourPlanBuilder) { + this.tourPlanBuilder = tourPlanBuilder; + } + + public TourPlan cancunTrip() throws InstantiationException, IllegalAccessException { + TourPlanBuilder builder = tourPlanBuilder.getClass().newInstance(); + return builder.title("칸쿤 여행") + .nightsAndDays(2, 3) + .startDate(LocalDate.of(2021, 12, 24)) + .whereToStay("리조트") + .addPlan(0, "체크인 하고 짐 풀기") + .addPlan(0, "저녁 식사") + .getPlan(); + } + + public TourPlan longBeachTrip() throws InstantiationException, IllegalAccessException { + TourPlanBuilder builder = tourPlanBuilder.getClass().newInstance(); + return builder.title("롱비치") + .startDate(LocalDate.of(2022, 1, 1)) + .getPlan(); + } +} diff --git a/design-pattern/gof/src/builder/after/TourPlan.java b/design-pattern/gof/src/builder/after/TourPlan.java new file mode 100644 index 00000000..249cf8d0 --- /dev/null +++ b/design-pattern/gof/src/builder/after/TourPlan.java @@ -0,0 +1,95 @@ +package builder.after; + +import java.time.LocalDate; +import java.util.List; + +public class TourPlan { + + private String title; + + private int nights; + + private int days; + + private LocalDate startDate; + + private String whereToStay; + + private List plans; + + public TourPlan() { + } + + public TourPlan(String title, int nights, int days, LocalDate startDate, String whereToStay, List plans) { + this.title = title; + this.nights = nights; + this.days = days; + this.startDate = startDate; + this.whereToStay = whereToStay; + this.plans = plans; + } + + @Override + public String toString() { + return "TourPlan{" + + "title='" + title + '\'' + + ", nights=" + nights + + ", days=" + days + + ", startDate=" + startDate + + ", whereToStay='" + whereToStay + '\'' + + ", plans=" + plans + + '}'; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getNights() { + return nights; + } + + public void setNights(int nights) { + this.nights = nights; + } + + public int getDays() { + return days; + } + + public void setDays(int days) { + this.days = days; + } + + public LocalDate getStartDate() { + return startDate; + } + + public void setStartDate(LocalDate startDate) { + this.startDate = startDate; + } + + public String getWhereToStay() { + return whereToStay; + } + + public void setWhereToStay(String whereToStay) { + this.whereToStay = whereToStay; + } + + public List getPlans() { + return plans; + } + + public void setPlans(List plans) { + this.plans = plans; + } + + public void addPlan(int day, String plan) { + this.plans.add(new DetailPlan(day, plan)); + } +} diff --git a/design-pattern/gof/src/builder/after/TourPlanBuilder.java b/design-pattern/gof/src/builder/after/TourPlanBuilder.java new file mode 100644 index 00000000..230393c8 --- /dev/null +++ b/design-pattern/gof/src/builder/after/TourPlanBuilder.java @@ -0,0 +1,18 @@ +package builder.after; + +import java.time.LocalDate; + +public interface TourPlanBuilder { + + TourPlanBuilder title(String title); + + TourPlanBuilder nightsAndDays(int nights, int days); + + TourPlanBuilder startDate(LocalDate startDate); + + TourPlanBuilder whereToStay(String whereToStay); + + TourPlanBuilder addPlan(int day, String plan); + + TourPlan getPlan(); +} diff --git a/design-pattern/gof/src/builder/before/App.java b/design-pattern/gof/src/builder/before/App.java new file mode 100644 index 00000000..b70ed6a0 --- /dev/null +++ b/design-pattern/gof/src/builder/before/App.java @@ -0,0 +1,31 @@ +package builder.before; + +import builder.after.TourPlan; + +import java.time.LocalDate; + +public class App { + + public static void main(String[] args) { + TourPlan shortTrip = new TourPlan(); + shortTrip.setTitle("오레곤 롱비치 여행"); + shortTrip.setStartDate(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.addPlan(0, "체크인 이후 짐풀기"); + tourPlan.addPlan(0, "저녁 식사"); + tourPlan.addPlan(1, "조식 부페에서 식사"); + tourPlan.addPlan(1, "해변가 산책"); + tourPlan.addPlan(1, "점심은 수영장 근처 음식점에서 먹기"); + tourPlan.addPlan(1, "리조트 수영장에서 놀기"); + tourPlan.addPlan(1, "저녁은 BBQ 식당에서 스테이크"); + tourPlan.addPlan(2, "조식 부페에서 식사"); + tourPlan.addPlan(2, "체크아웃"); + } +} diff --git a/design-pattern/gof/src/builder/before/DetailPlan.java b/design-pattern/gof/src/builder/before/DetailPlan.java new file mode 100644 index 00000000..b18bb1cb --- /dev/null +++ b/design-pattern/gof/src/builder/before/DetailPlan.java @@ -0,0 +1,37 @@ +package builder.before; + +public class DetailPlan { + + private int day; + + private String plan; + + public DetailPlan(int day, String plan) { + this.day = day; + this.plan = plan; + } + + public int getDay() { + return day; + } + + public void setDay(int day) { + this.day = day; + } + + public String getPlan() { + return plan; + } + + public void setPlan(String plan) { + this.plan = plan; + } + + @Override + public String toString() { + return "DetailPlan{" + + "day=" + day + + ", plan='" + plan + '\'' + + '}'; + } +} diff --git a/design-pattern/gof/src/builder/before/TourPlan.java b/design-pattern/gof/src/builder/before/TourPlan.java new file mode 100644 index 00000000..e7947298 --- /dev/null +++ b/design-pattern/gof/src/builder/before/TourPlan.java @@ -0,0 +1,95 @@ +package builder.before; + +import java.time.LocalDate; +import java.util.List; + +public class TourPlan { + + private String title; + + private int nights; + + private int days; + + private LocalDate startDate; + + private String whereToStay; + + private List plans; + + public TourPlan() { + } + + public TourPlan(String title, int nights, int days, LocalDate startDate, String whereToStay, List plans) { + this.title = title; + this.nights = nights; + this.days = days; + this.startDate = startDate; + this.whereToStay = whereToStay; + this.plans = plans; + } + + @Override + public String toString() { + return "TourPlan{" + + "title='" + title + '\'' + + ", nights=" + nights + + ", days=" + days + + ", startDate=" + startDate + + ", whereToStay='" + whereToStay + '\'' + + ", plans=" + plans + + '}'; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getNights() { + return nights; + } + + public void setNights(int nights) { + this.nights = nights; + } + + public int getDays() { + return days; + } + + public void setDays(int days) { + this.days = days; + } + + public LocalDate getStartDate() { + return startDate; + } + + public void setStartDate(LocalDate startDate) { + this.startDate = startDate; + } + + public String getWhereToStay() { + return whereToStay; + } + + public void setWhereToStay(String whereToStay) { + this.whereToStay = whereToStay; + } + + public List getPlans() { + return plans; + } + + public void setPlans(List plans) { + this.plans = plans; + } + + public void addPlan(int day, String plan) { + this.plans.add(new DetailPlan(day, plan)); + } +}