diff --git a/src/main/java/bad/robot/refactoring/chapter1/Customer.java b/src/main/java/bad/robot/refactoring/chapter1/Customer.java index a4c8013..bb36b94 100644 --- a/src/main/java/bad/robot/refactoring/chapter1/Customer.java +++ b/src/main/java/bad/robot/refactoring/chapter1/Customer.java @@ -21,36 +21,22 @@ public void addRental(Rental rental) { } public String statement() { + double totalAmount = 0; + int frequentRenterPoints = 0; + String result = "Rental record for " + getName() + "\n"; - for (Rental rental : rentals) - result += "\t" + rental.getMovie().getTitle() + "\t" + String.valueOf(rental.getCharge()) + "\n"; - result += "Amount owed is " + String.valueOf(getTotalCharge()) + "\n"; - result += "You earned " + String.valueOf(getTotalFrequentRenterPoints()) + " frequent renter points"; - return result; - } + for (Rental rental : rentals) { + frequentRenterPoints += rental.calculateFrequentRenterPoints(); - public String htmlStatement() { - String result = "
" + rental.getMovie().getTitle() + "\t" + String.valueOf(rental.getCharge()) + "
\n"; - result += "Amount owed is " + String.valueOf(getTotalCharge()) + "
\n"; - result += "You earned " + String.valueOf(getTotalFrequentRenterPoints()) + " frequent renter points
"; - return result; + // show figures for this rental + result += "\t" + rental.getMovie().getTitle() + "\t" + String.valueOf(rental.getChargeFor()) + "\n"; - } + totalAmount += rental.getChargeFor(); + } - private double getTotalCharge() { - double total = 0; - for (Rental rental : rentals) - total += rental.getCharge(); - return total; - } + result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; + result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; - private int getTotalFrequentRenterPoints() { - int total = 0; - for (Rental rental : rentals) - total += rental.getFrequentRenterPoints(); - return total; + return result; } - } diff --git a/src/main/java/bad/robot/refactoring/chapter1/Movie.java b/src/main/java/bad/robot/refactoring/chapter1/Movie.java index e4b457e..0dd60fd 100644 --- a/src/main/java/bad/robot/refactoring/chapter1/Movie.java +++ b/src/main/java/bad/robot/refactoring/chapter1/Movie.java @@ -7,43 +7,23 @@ public class Movie { public static final int NEW_RELEASE = 1; private String title; - Price price; + private int priceCode; public Movie(String title, int priceCode) { this.title = title; - setPriceCode(priceCode); + this.priceCode = priceCode; } public String getTitle() { return title; } - private void setPriceCode(int priceCode) { - switch (priceCode) { - case CHILDREN: - price = new ChildrensPrice(); - break; - case NEW_RELEASE: - price = new NewReleasePrice(); - break; - case REGULAR: - price = new RegularPrice(); - break; - default: - throw new IllegalArgumentException("invalid price code"); - } + public int getPriceCode() { + return priceCode; } - private int getPriceCode() { - return price.getPriceCode(); + public void setPriceCode(int priceCode) { + this.priceCode = priceCode; } - public double getCharge(int daysRented) { - return price.getCharge(daysRented); - } - - public int getFrequentRenterPoints(int daysRented) { - return price.getFrequentRenterPoints(daysRented); - } - -} +} \ No newline at end of file diff --git a/src/main/java/bad/robot/refactoring/chapter1/Rental.java b/src/main/java/bad/robot/refactoring/chapter1/Rental.java index aca7d95..fd669f4 100644 --- a/src/main/java/bad/robot/refactoring/chapter1/Rental.java +++ b/src/main/java/bad/robot/refactoring/chapter1/Rental.java @@ -1,8 +1,11 @@ package bad.robot.refactoring.chapter1; +import java.util.ArrayList; +import java.util.List; + public class Rental { - Movie movie; + private Movie movie; private int daysRented; public Rental(Movie movie, int daysRented) { @@ -18,11 +21,30 @@ public int getDaysRented() { return daysRented; } - public double getCharge() { - return movie.getCharge(daysRented); - } + double getChargeFor() { + double amount = 0; + switch (getMovie().getPriceCode()) { + case Movie.REGULAR: + amount += 2; + if (getDaysRented() > 2) + amount += (getDaysRented() - 2) * 1.5; + break; + case Movie.NEW_RELEASE: + amount += getDaysRented() * 3; + break; + case Movie.CHILDREN: + amount += 1.5; + if (getDaysRented() > 3) + amount += (getDaysRented() - 3) * 1.5; + break; + } + return amount; + } + + int calculateFrequentRenterPoints() { + if (getMovie().getPriceCode() == Movie.NEW_RELEASE && getDaysRented() > 1) + return 2; + return 1; + } - public int getFrequentRenterPoints() { - return movie.getFrequentRenterPoints(daysRented); - } }