From 027164ff1c0823f233e02258697c411e8593eade Mon Sep 17 00:00:00 2001 From: creaton60 Date: Thu, 9 Jan 2020 01:01:33 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[update=20feature]=20lombok=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 91b0fa2..038bdf1 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { group 'study' version '1.0.0' -sourceCompatibility = 1.8 +sourceCompatibility = 11 repositories { mavenCentral() @@ -13,4 +13,7 @@ repositories { dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' + + compileOnly 'org.projectlombok:lombok:1.18.10' + annotationProcessor 'org.projectlombok:lombok:1.18.10' } From df1a6d35175d7f34989cbc39804920701b409f70 Mon Sep 17 00:00:00 2001 From: creaton60 Date: Thu, 9 Jan 2020 01:01:49 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[update=20feature]=20model=20field=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/study/book/object/ticket/model/Invitation.java | 9 +++++++++ src/main/java/study/book/object/ticket/model/Ticket.java | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/study/book/object/ticket/model/Invitation.java b/src/main/java/study/book/object/ticket/model/Invitation.java index 91d51ab..68cb6a6 100644 --- a/src/main/java/study/book/object/ticket/model/Invitation.java +++ b/src/main/java/study/book/object/ticket/model/Invitation.java @@ -1,4 +1,13 @@ package study.book.object.ticket.model; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.time.LocalDateTime; + +@Getter @Setter +@ToString public class Invitation { + private LocalDateTime when; } diff --git a/src/main/java/study/book/object/ticket/model/Ticket.java b/src/main/java/study/book/object/ticket/model/Ticket.java index fe1820d..d678af6 100644 --- a/src/main/java/study/book/object/ticket/model/Ticket.java +++ b/src/main/java/study/book/object/ticket/model/Ticket.java @@ -1,4 +1,11 @@ package study.book.object.ticket.model; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter @Setter +@ToString public class Ticket { + private Long fee; } From 16bb155849e2cfbfa65e83204d65c412db604eb7 Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sat, 11 Jan 2020 22:48:08 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[update=20feature]=20=EA=B4=80=EB=9E=8C?= =?UTF-8?q?=EA=B0=9D=EC=9D=B4=20=EC=86=8C=EC=A7=80=ED=92=88=EC=9D=84=20?= =?UTF-8?q?=EB=B3=B4=EA=B4=80=ED=95=A0=20Bag=20Model=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study/book/object/ticket/model/Bag.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/study/book/object/ticket/model/Bag.java diff --git a/src/main/java/study/book/object/ticket/model/Bag.java b/src/main/java/study/book/object/ticket/model/Bag.java new file mode 100644 index 0000000..2b55204 --- /dev/null +++ b/src/main/java/study/book/object/ticket/model/Bag.java @@ -0,0 +1,29 @@ +package study.book.object.ticket.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter @Setter +@ToString +public class Bag { + private Long amount; + private Invitation invitation; + private Ticket ticket; + + public boolean hasInvitation() { + return invitation != null; + } + + public boolean hasTicket() { + return ticket !=null; + } + + public void minusAmount(Long amount) { + this.amount -= amount; + } + + public void plusAmount(Long amount) { + this.amount += amount; + } +} From 804417b06f2f26da4df5042fdd03baefdcda96ea Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sat, 11 Jan 2020 22:51:06 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[update=20feature]=20Bag=20Model=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=BB=A8=EB=B2=A4=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study/book/object/ticket/model/Bag.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/study/book/object/ticket/model/Bag.java b/src/main/java/study/book/object/ticket/model/Bag.java index 2b55204..d4a370e 100644 --- a/src/main/java/study/book/object/ticket/model/Bag.java +++ b/src/main/java/study/book/object/ticket/model/Bag.java @@ -11,6 +11,27 @@ public class Bag { private Invitation invitation; private Ticket ticket; + /** + * Bag Instance 의 상태는 + * 현금과 초대장을 함께 보관하거나, 초대장 없이 보관하는 두가지 + * 이 두가지를 인스턴스 생성 시점에 강제한다. + * @param amount 현금 보유량 + */ + public Bag(long amount) { + this(null, amount); + } + + /** + * Bag 생성시 초대장과 현금보유량으로 생성규정 + * + * @param invitation 초대장 + * @param amount 현금 보유량 + */ + public Bag(Invitation invitation, long amount) { + this.invitation = invitation; + this.amount = amount; + } + public boolean hasInvitation() { return invitation != null; } From 85c93a484cdc2a87e62a86dd4b8fcc310edf99f7 Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sat, 11 Jan 2020 22:52:46 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[update=20feature]=20=EA=B4=80=EB=9E=8C?= =?UTF-8?q?=EA=B0=9D=20Model=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/object/ticket/model/Audience.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/study/book/object/ticket/model/Audience.java diff --git a/src/main/java/study/book/object/ticket/model/Audience.java b/src/main/java/study/book/object/ticket/model/Audience.java new file mode 100644 index 0000000..e2391b0 --- /dev/null +++ b/src/main/java/study/book/object/ticket/model/Audience.java @@ -0,0 +1,18 @@ +package study.book.object.ticket.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 관람객 Model + */ +@Getter @Setter +@ToString +public class Audience { + private Bag bag; + + public Audience(Bag bag) { + this.bag = bag; + } +} From 059fbfdd3740db96262670b8792fddf00afb6664 Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sat, 11 Jan 2020 22:56:12 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[update=20feature]=20=EB=A7=A4=ED=91=9C?= =?UTF-8?q?=EC=86=8C=20Model=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../object/ticket/model/TicketOffice.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/study/book/object/ticket/model/TicketOffice.java diff --git a/src/main/java/study/book/object/ticket/model/TicketOffice.java b/src/main/java/study/book/object/ticket/model/TicketOffice.java new file mode 100644 index 0000000..9398dff --- /dev/null +++ b/src/main/java/study/book/object/ticket/model/TicketOffice.java @@ -0,0 +1,35 @@ +package study.book.object.ticket.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 매표소 Model + */ +@ToString +public class TicketOffice { + private Long amount; + private List tickets = new ArrayList<>(); + + public TicketOffice(Long amount, Ticket... tickets) { + this.amount = amount; + this.tickets.addAll(Arrays.asList(tickets)); + } + + public Ticket getTicket() { + return tickets.remove(0); + } + + public void minusAmount(Long amount) { + this.amount -= amount; + } + + public void plusAmount(Long amount) { + this.amount += amount; + } +} From ae0489f9cc3e478860634c77df1a2ad93346b8e8 Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sat, 11 Jan 2020 22:57:18 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[update=20feature]=20=ED=8B=B0=EC=BC=93=20?= =?UTF-8?q?=ED=8C=90=EB=A7=A4=EC=B2=98=20Model=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/object/ticket/model/TicketSeller.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/study/book/object/ticket/model/TicketSeller.java diff --git a/src/main/java/study/book/object/ticket/model/TicketSeller.java b/src/main/java/study/book/object/ticket/model/TicketSeller.java new file mode 100644 index 0000000..9a67510 --- /dev/null +++ b/src/main/java/study/book/object/ticket/model/TicketSeller.java @@ -0,0 +1,15 @@ +package study.book.object.ticket.model; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Getter @Setter +@ToString +public class TicketSeller { + private TicketOffice ticketOffice; + + public TicketSeller(TicketOffice ticketOffice) { + this.ticketOffice = ticketOffice; + } +} From d6f9f9b29c052491434b886f3b3a8d9b759cbd75 Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sat, 11 Jan 2020 23:01:14 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[update=20feature]=20=EA=B7=B9=EC=9E=A5=20S?= =?UTF-8?q?ervice=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/object/ticket/service/Theater.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/study/book/object/ticket/service/Theater.java diff --git a/src/main/java/study/book/object/ticket/service/Theater.java b/src/main/java/study/book/object/ticket/service/Theater.java new file mode 100644 index 0000000..4e7a308 --- /dev/null +++ b/src/main/java/study/book/object/ticket/service/Theater.java @@ -0,0 +1,25 @@ +package study.book.object.ticket.service; + +import study.book.object.ticket.model.Audience; +import study.book.object.ticket.model.Ticket; +import study.book.object.ticket.model.TicketSeller; + +public class Theater { + private TicketSeller ticketSeller; + + public Theater(TicketSeller ticketSeller) { + this.ticketSeller = ticketSeller; + } + + public void enter(Audience audience) { + if(audience.getBag().hasInvitation()) { + Ticket ticket = ticketSeller.getTicketOffice().getTicket(); + audience.getBag().setTicket(ticket); + } else { + Ticket ticket = ticketSeller.getTicketOffice().getTicket(); + audience.getBag().minusAmount(ticket.getFee()); + ticketSeller.getTicketOffice().plusAmount(ticket.getFee()); + audience.getBag().setTicket(ticket); + } + } +}