From 568b4fade903e3d89c82ab8c1a4fbae6019a83cd Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sun, 12 Jan 2020 21:48:09 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[create]=20domain=20=EC=97=90=20=EB=A7=9E?= =?UTF-8?q?=EC=B6=98=20class=20=EA=B5=AC=EC=A1=B0=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/study/book/object/movie/Movie.java | 4 ++++ src/main/java/study/book/object/movie/Reservation.java | 4 ++++ src/main/java/study/book/object/movie/Screening.java | 4 ++++ .../study/book/object/movie/condition/DiscountCondition.java | 4 ++++ .../study/book/object/movie/condition/PeriodCondition.java | 4 ++++ .../study/book/object/movie/condition/SequenceCondition.java | 4 ++++ .../study/book/object/movie/policy/AmountDiscountPolicy.java | 4 ++++ .../java/study/book/object/movie/policy/DiscountPolicy.java | 4 ++++ .../study/book/object/movie/policy/PercentDiscountPolicy.java | 4 ++++ 9 files changed, 36 insertions(+) create mode 100644 src/main/java/study/book/object/movie/Movie.java create mode 100644 src/main/java/study/book/object/movie/Reservation.java create mode 100644 src/main/java/study/book/object/movie/Screening.java create mode 100644 src/main/java/study/book/object/movie/condition/DiscountCondition.java create mode 100644 src/main/java/study/book/object/movie/condition/PeriodCondition.java create mode 100644 src/main/java/study/book/object/movie/condition/SequenceCondition.java create mode 100644 src/main/java/study/book/object/movie/policy/AmountDiscountPolicy.java create mode 100644 src/main/java/study/book/object/movie/policy/DiscountPolicy.java create mode 100644 src/main/java/study/book/object/movie/policy/PercentDiscountPolicy.java diff --git a/src/main/java/study/book/object/movie/Movie.java b/src/main/java/study/book/object/movie/Movie.java new file mode 100644 index 0000000..d566bc4 --- /dev/null +++ b/src/main/java/study/book/object/movie/Movie.java @@ -0,0 +1,4 @@ +package study.book.object.movie; + +public class Movie { +} diff --git a/src/main/java/study/book/object/movie/Reservation.java b/src/main/java/study/book/object/movie/Reservation.java new file mode 100644 index 0000000..3734617 --- /dev/null +++ b/src/main/java/study/book/object/movie/Reservation.java @@ -0,0 +1,4 @@ +package study.book.object.movie; + +public class Reservation { +} diff --git a/src/main/java/study/book/object/movie/Screening.java b/src/main/java/study/book/object/movie/Screening.java new file mode 100644 index 0000000..611411f --- /dev/null +++ b/src/main/java/study/book/object/movie/Screening.java @@ -0,0 +1,4 @@ +package study.book.object.movie; + +public class Screening { +} diff --git a/src/main/java/study/book/object/movie/condition/DiscountCondition.java b/src/main/java/study/book/object/movie/condition/DiscountCondition.java new file mode 100644 index 0000000..dcfdd45 --- /dev/null +++ b/src/main/java/study/book/object/movie/condition/DiscountCondition.java @@ -0,0 +1,4 @@ +package study.book.object.movie.condition; + +public class DiscountCondition { +} diff --git a/src/main/java/study/book/object/movie/condition/PeriodCondition.java b/src/main/java/study/book/object/movie/condition/PeriodCondition.java new file mode 100644 index 0000000..3e0d2b0 --- /dev/null +++ b/src/main/java/study/book/object/movie/condition/PeriodCondition.java @@ -0,0 +1,4 @@ +package study.book.object.movie.condition; + +public class PeriodCondition { +} diff --git a/src/main/java/study/book/object/movie/condition/SequenceCondition.java b/src/main/java/study/book/object/movie/condition/SequenceCondition.java new file mode 100644 index 0000000..0044f2d --- /dev/null +++ b/src/main/java/study/book/object/movie/condition/SequenceCondition.java @@ -0,0 +1,4 @@ +package study.book.object.movie.condition; + +public class SequenceCondition { +} diff --git a/src/main/java/study/book/object/movie/policy/AmountDiscountPolicy.java b/src/main/java/study/book/object/movie/policy/AmountDiscountPolicy.java new file mode 100644 index 0000000..80864c9 --- /dev/null +++ b/src/main/java/study/book/object/movie/policy/AmountDiscountPolicy.java @@ -0,0 +1,4 @@ +package study.book.object.movie.policy; + +public class AmountDiscountPolicy { +} diff --git a/src/main/java/study/book/object/movie/policy/DiscountPolicy.java b/src/main/java/study/book/object/movie/policy/DiscountPolicy.java new file mode 100644 index 0000000..37648bf --- /dev/null +++ b/src/main/java/study/book/object/movie/policy/DiscountPolicy.java @@ -0,0 +1,4 @@ +package study.book.object.movie.policy; + +public class DiscountPolicy { +} diff --git a/src/main/java/study/book/object/movie/policy/PercentDiscountPolicy.java b/src/main/java/study/book/object/movie/policy/PercentDiscountPolicy.java new file mode 100644 index 0000000..dd6cb2b --- /dev/null +++ b/src/main/java/study/book/object/movie/policy/PercentDiscountPolicy.java @@ -0,0 +1,4 @@ +package study.book.object.movie.policy; + +public class PercentDiscountPolicy { +} From b3f9d1ad91553288faf4331498171335ef136877 Mon Sep 17 00:00:00 2001 From: creaton60 Date: Sun, 12 Jan 2020 22:22:11 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[update=20feature]=20=ED=98=91=EB=A0=A5?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B0=9D=EC=B2=B4=20=EB=AA=A8=EB=8D=B8?= =?UTF-8?q?=EB=A1=9C=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study/book/object/movie/Customer.java | 4 ++ .../java/study/book/object/movie/Money.java | 47 +++++++++++++++++++ .../java/study/book/object/movie/Movie.java | 13 +++++ .../study/book/object/movie/Reservation.java | 15 ++++++ .../study/book/object/movie/Screening.java | 31 ++++++++++++ 5 files changed, 110 insertions(+) create mode 100644 src/main/java/study/book/object/movie/Customer.java create mode 100644 src/main/java/study/book/object/movie/Money.java diff --git a/src/main/java/study/book/object/movie/Customer.java b/src/main/java/study/book/object/movie/Customer.java new file mode 100644 index 0000000..df4e2b9 --- /dev/null +++ b/src/main/java/study/book/object/movie/Customer.java @@ -0,0 +1,4 @@ +package study.book.object.movie; + +public class Customer { +} diff --git a/src/main/java/study/book/object/movie/Money.java b/src/main/java/study/book/object/movie/Money.java new file mode 100644 index 0000000..6785294 --- /dev/null +++ b/src/main/java/study/book/object/movie/Money.java @@ -0,0 +1,47 @@ +package study.book.object.movie; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; + +@Getter @Setter +@ToString +public class Money { + public static final Money ZERO = Money.wons(0); + + private final BigDecimal amount; + + public static Money wons(long amount) { + return new Money(BigDecimal.valueOf(amount)); + } + + public static Money wons(double amount) { + return new Money(BigDecimal.valueOf(amount)); + } + + Money(BigDecimal amount) { + this.amount = amount; + } + + public Money plus(Money amount) { + return new Money(this.amount.subtract(amount.amount)); + } + + public Money times(double percent) { + return new Money(this.amount.multiply(BigDecimal.valueOf(percent))); + } + + public Money minus(Money amount) { + return new Money(this.amount.add(amount.amount)); + } + + public boolean isLessThan(Money other) { + return amount.compareTo(other.amount) < 0; + } + + public boolean isGreaterThanOrEqual(Money other) { + return amount.compareTo(other.amount) >= 0; + } +} diff --git a/src/main/java/study/book/object/movie/Movie.java b/src/main/java/study/book/object/movie/Movie.java index d566bc4..24e2314 100644 --- a/src/main/java/study/book/object/movie/Movie.java +++ b/src/main/java/study/book/object/movie/Movie.java @@ -1,4 +1,17 @@ package study.book.object.movie; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; + +@Getter @Setter +@ToString public class Movie { + private Money fee; + + public Money calculateMovieFee(Screening screening) { + return fee.minus(new Money(BigDecimal.ZERO)); + } } diff --git a/src/main/java/study/book/object/movie/Reservation.java b/src/main/java/study/book/object/movie/Reservation.java index 3734617..e47d7ad 100644 --- a/src/main/java/study/book/object/movie/Reservation.java +++ b/src/main/java/study/book/object/movie/Reservation.java @@ -1,4 +1,19 @@ package study.book.object.movie; +import lombok.ToString; + +@ToString public class Reservation { + private Customer customer; + private Screening screening; + private Money fee; + private int audienceCount; + + public Reservation(Customer customer, Screening screening, Money fee, int audienceCount) { + this.customer = customer; + this.screening = screening; + this.fee = fee; + this.audienceCount = audienceCount; + } + } diff --git a/src/main/java/study/book/object/movie/Screening.java b/src/main/java/study/book/object/movie/Screening.java index 611411f..485a856 100644 --- a/src/main/java/study/book/object/movie/Screening.java +++ b/src/main/java/study/book/object/movie/Screening.java @@ -1,4 +1,35 @@ package study.book.object.movie; +import java.time.LocalDateTime; + public class Screening { + private Movie movie; + private int sequece; + private LocalDateTime whenScreened; + + public Screening(Movie movie, int sequence, LocalDateTime whenScreened) { + this.movie = movie; + this.sequece = sequence; + this.whenScreened = whenScreened; + } + + public Reservation reserve(Customer customer, int audienceCount) { + return new Reservation(customer, this, calculateFee(audienceCount), audienceCount); + } + + public LocalDateTime getStartTime() { + return whenScreened; + } + + public boolean isSequence(int sequence) { + return this.sequece == sequece; + } + + public Money getMovieFee() { + return movie.getFee(); + } + + private Money calculateFee(int audienceCount) { + return movie.calculateMovieFee(this); + } }