Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/main/java/video/domain/Movie.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,7 @@ public int amount(int daysRented) {
return priceType.amount(daysRented);
}

public int frequentRenterPoints(int daysRented) {
return priceType.frequentRenterPoints(daysRented);
}
}
18 changes: 14 additions & 4 deletions src/main/java/video/domain/PriceType.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
8 changes: 8 additions & 0 deletions src/main/java/video/domain/point/ChildrenPoint.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package video.domain.point;

public class ChildrenPoint implements Point {
@Override
public int frequentRenterPoints(int daysRented) {
return 1;
}
}
10 changes: 10 additions & 0 deletions src/main/java/video/domain/point/NewReleasePoint.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
5 changes: 5 additions & 0 deletions src/main/java/video/domain/point/Point.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package video.domain.point;

public interface Point {
int frequentRenterPoints(int daysRented);
}
8 changes: 8 additions & 0 deletions src/main/java/video/domain/point/RegularPoint.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package video.domain.point;

public class RegularPoint implements Point {
@Override
public int frequentRenterPoints(int daysRented) {
return 1;
}
}
6 changes: 1 addition & 5 deletions src/main/java/video/domain/rental/Rental.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package video.domain.rental;

import video.domain.Movie;
import video.domain.PriceType;

public class Rental {

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