diff --git a/src/main/java/video/domain/Movie.java b/src/main/java/video/domain/Movie.java index d73a614..0e12096 100644 --- a/src/main/java/video/domain/Movie.java +++ b/src/main/java/video/domain/Movie.java @@ -27,4 +27,7 @@ public int amount(int daysRented) { return priceType.amount(daysRented); } + public int frequentRenterPoints(int daysRented) { + return priceType.frequentRenterPoints(daysRented); + } } \ No newline at end of file diff --git a/src/main/java/video/domain/PriceType.java b/src/main/java/video/domain/PriceType.java index 5b15599..038725b 100644 --- a/src/main/java/video/domain/PriceType.java +++ b/src/main/java/video/domain/PriceType.java @@ -1,22 +1,32 @@ package video.domain; +import video.domain.point.ChildrenPoint; +import video.domain.point.NewReleasePoint; +import video.domain.point.Point; +import video.domain.point.RegularPoint; import video.domain.price.ChildrenPrice; import video.domain.price.NewReleasePrice; import video.domain.price.Price; import video.domain.price.RegularPrice; public enum PriceType { - CHILDREN(new ChildrenPrice()), - REGULAR(new RegularPrice()), - NEW_RELEASE(new NewReleasePrice()); + CHILDREN(new ChildrenPrice(), new ChildrenPoint()), + REGULAR(new RegularPrice(), new RegularPoint()), + NEW_RELEASE(new NewReleasePrice(), new NewReleasePoint()); Price price; + Point point; - PriceType(Price price) { + PriceType(Price price, Point point) { this.price = price; + this.point = point; } int amount(int daysRented) { return price.amount(daysRented); } + + public int frequentRenterPoints(int daysRented) { + return point.frequentRenterPoints(daysRented); + } } diff --git a/src/main/java/video/domain/point/ChildrenPoint.java b/src/main/java/video/domain/point/ChildrenPoint.java new file mode 100644 index 0000000..0007e0d --- /dev/null +++ b/src/main/java/video/domain/point/ChildrenPoint.java @@ -0,0 +1,8 @@ +package video.domain.point; + +public class ChildrenPoint implements Point { + @Override + public int frequentRenterPoints(int daysRented) { + return 1; + } +} diff --git a/src/main/java/video/domain/point/NewReleasePoint.java b/src/main/java/video/domain/point/NewReleasePoint.java new file mode 100644 index 0000000..d1c1349 --- /dev/null +++ b/src/main/java/video/domain/point/NewReleasePoint.java @@ -0,0 +1,10 @@ +package video.domain.point; + +public class NewReleasePoint implements Point { + @Override + public int frequentRenterPoints(int daysRented) { + // 新作を二日以上借りた場合はボーナスポイント + if (daysRented > 1) return 2; + return 1; + } +} diff --git a/src/main/java/video/domain/point/Point.java b/src/main/java/video/domain/point/Point.java new file mode 100644 index 0000000..0b63e7f --- /dev/null +++ b/src/main/java/video/domain/point/Point.java @@ -0,0 +1,5 @@ +package video.domain.point; + +public interface Point { + int frequentRenterPoints(int daysRented); +} diff --git a/src/main/java/video/domain/point/RegularPoint.java b/src/main/java/video/domain/point/RegularPoint.java new file mode 100644 index 0000000..45fa0e8 --- /dev/null +++ b/src/main/java/video/domain/point/RegularPoint.java @@ -0,0 +1,8 @@ +package video.domain.point; + +public class RegularPoint implements Point { + @Override + public int frequentRenterPoints(int daysRented) { + return 1; + } +} diff --git a/src/main/java/video/domain/rental/Rental.java b/src/main/java/video/domain/rental/Rental.java index 2e514b2..87a0e17 100644 --- a/src/main/java/video/domain/rental/Rental.java +++ b/src/main/java/video/domain/rental/Rental.java @@ -1,7 +1,6 @@ package video.domain.rental; import video.domain.Movie; -import video.domain.PriceType; public class Rental { @@ -28,9 +27,6 @@ public int amount() { } public int frequentRenterPoints() { - // 新作を二日以上借りた場合はボーナスポイント - if ((getMovie().getPriceType() == PriceType.NEW_RELEASE) && - getDaysRented() > 1) return 2; - return 1; + return movie.frequentRenterPoints(daysRented); } } \ No newline at end of file