design patterns : builder
This commit is contained in:
27
design-pattern/gof/src/builder/after/App.java
Normal file
27
design-pattern/gof/src/builder/after/App.java
Normal 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);
|
||||
}
|
||||
}
|
||||
54
design-pattern/gof/src/builder/after/DefaultTourBuilder.java
Normal file
54
design-pattern/gof/src/builder/after/DefaultTourBuilder.java
Normal 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);
|
||||
}
|
||||
}
|
||||
37
design-pattern/gof/src/builder/after/DetailPlan.java
Normal file
37
design-pattern/gof/src/builder/after/DetailPlan.java
Normal 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 + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
30
design-pattern/gof/src/builder/after/TourDirector.java
Normal file
30
design-pattern/gof/src/builder/after/TourDirector.java
Normal 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();
|
||||
}
|
||||
}
|
||||
95
design-pattern/gof/src/builder/after/TourPlan.java
Normal file
95
design-pattern/gof/src/builder/after/TourPlan.java
Normal 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));
|
||||
}
|
||||
}
|
||||
18
design-pattern/gof/src/builder/after/TourPlanBuilder.java
Normal file
18
design-pattern/gof/src/builder/after/TourPlanBuilder.java
Normal 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();
|
||||
}
|
||||
31
design-pattern/gof/src/builder/before/App.java
Normal file
31
design-pattern/gof/src/builder/before/App.java
Normal 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, "체크아웃");
|
||||
}
|
||||
}
|
||||
37
design-pattern/gof/src/builder/before/DetailPlan.java
Normal file
37
design-pattern/gof/src/builder/before/DetailPlan.java
Normal 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 + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
95
design-pattern/gof/src/builder/before/TourPlan.java
Normal file
95
design-pattern/gof/src/builder/before/TourPlan.java
Normal 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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user