design patterns : builder

This commit is contained in:
haerong22
2021-12-01 01:56:58 +09:00
parent bcf5a61879
commit dcd3980d62
9 changed files with 424 additions and 0 deletions

View File

@@ -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);
}
}

View File

@@ -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<DetailPlan> 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);
}
}

View File

@@ -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 + '\'' +
'}';
}
}

View File

@@ -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();
}
}

View File

@@ -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<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;
}
@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<DetailPlan> getPlans() {
return plans;
}
public void setPlans(List<DetailPlan> plans) {
this.plans = plans;
}
public void addPlan(int day, String plan) {
this.plans.add(new DetailPlan(day, plan));
}
}

View File

@@ -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();
}

View File

@@ -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, "체크아웃");
}
}

View File

@@ -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 + '\'' +
'}';
}
}

View File

@@ -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<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;
}
@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<DetailPlan> getPlans() {
return plans;
}
public void setPlans(List<DetailPlan> plans) {
this.plans = plans;
}
public void addPlan(int day, String plan) {
this.plans.add(new DetailPlan(day, plan));
}
}