From 667b0c5c56bd291cc84499dd7e48c9838567b0c1 Mon Sep 17 00:00:00 2001 From: brandonedgarton <61728761+brandonedgarton@users.noreply.github.com> Date: Thu, 25 Jan 2024 21:39:14 -0900 Subject: [PATCH 1/2] 1.0 --- .../robot/refactoring/chapter1/Customer.java | 63 ++++++++++--------- .../bad/robot/refactoring/chapter1/Movie.java | 34 +++------- .../robot/refactoring/chapter1/Rental.java | 12 ++-- 3 files changed, 46 insertions(+), 63 deletions(-) diff --git a/src/main/java/bad/robot/refactoring/chapter1/Customer.java b/src/main/java/bad/robot/refactoring/chapter1/Customer.java index a4c8013..3076d96 100644 --- a/src/main/java/bad/robot/refactoring/chapter1/Customer.java +++ b/src/main/java/bad/robot/refactoring/chapter1/Customer.java @@ -21,36 +21,43 @@ 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) { + double amount = 0; + switch (rental.getMovie().getPriceCode()) { + case Movie.REGULAR: + amount += 2; + if (rental.getDaysRented() > 2) + amount += (rental.getDaysRented() - 2) * 1.5; + break; + case Movie.NEW_RELEASE: + amount += rental.getDaysRented() * 3; + break; + case Movie.CHILDREN: + amount += 1.5; + if (rental.getDaysRented() > 3) + amount += (rental.getDaysRented() - 3) * 1.5; + break; + } + + // add frequent renter points + frequentRenterPoints++; + // add bonus for a two day new release rental + if (rental.getMovie().getPriceCode() == Movie.NEW_RELEASE && rental.getDaysRented() > 1) + frequentRenterPoints++; + + // show figures for this rental + result += "\t" + rental.getMovie().getTitle() + "\t" + String.valueOf(amount) + "\n"; + + totalAmount += amount; + } + + result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; + result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; - 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; - } - - private double getTotalCharge() { - double total = 0; - for (Rental rental : rentals) - total += rental.getCharge(); - return total; - } - - private int getTotalFrequentRenterPoints() { - int total = 0; - for (Rental rental : rentals) - total += rental.getFrequentRenterPoints(); - return total; - } - } 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..5c736e0 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,4 @@ public int getDaysRented() { return daysRented; } - public double getCharge() { - return movie.getCharge(daysRented); - } - - public int getFrequentRenterPoints() { - return movie.getFrequentRenterPoints(daysRented); - } } From bc62da93b96821ce85bae625b64a2e008577899a Mon Sep 17 00:00:00 2001 From: brandonedgarton <61728761+brandonedgarton@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:40:34 -0900 Subject: [PATCH 2/2] v1.1 --- .../robot/refactoring/chapter1/Customer.java | 27 +++---------------- .../robot/refactoring/chapter1/Rental.java | 26 ++++++++++++++++++ 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/main/java/bad/robot/refactoring/chapter1/Customer.java b/src/main/java/bad/robot/refactoring/chapter1/Customer.java index 3076d96..bb36b94 100644 --- a/src/main/java/bad/robot/refactoring/chapter1/Customer.java +++ b/src/main/java/bad/robot/refactoring/chapter1/Customer.java @@ -26,33 +26,12 @@ public String statement() { String result = "Rental record for " + getName() + "\n"; for (Rental rental : rentals) { - double amount = 0; - switch (rental.getMovie().getPriceCode()) { - case Movie.REGULAR: - amount += 2; - if (rental.getDaysRented() > 2) - amount += (rental.getDaysRented() - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - amount += rental.getDaysRented() * 3; - break; - case Movie.CHILDREN: - amount += 1.5; - if (rental.getDaysRented() > 3) - amount += (rental.getDaysRented() - 3) * 1.5; - break; - } - - // add frequent renter points - frequentRenterPoints++; - // add bonus for a two day new release rental - if (rental.getMovie().getPriceCode() == Movie.NEW_RELEASE && rental.getDaysRented() > 1) - frequentRenterPoints++; + frequentRenterPoints += rental.calculateFrequentRenterPoints(); // show figures for this rental - result += "\t" + rental.getMovie().getTitle() + "\t" + String.valueOf(amount) + "\n"; + result += "\t" + rental.getMovie().getTitle() + "\t" + String.valueOf(rental.getChargeFor()) + "\n"; - totalAmount += amount; + totalAmount += rental.getChargeFor(); } result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; diff --git a/src/main/java/bad/robot/refactoring/chapter1/Rental.java b/src/main/java/bad/robot/refactoring/chapter1/Rental.java index 5c736e0..fd669f4 100644 --- a/src/main/java/bad/robot/refactoring/chapter1/Rental.java +++ b/src/main/java/bad/robot/refactoring/chapter1/Rental.java @@ -21,4 +21,30 @@ public int getDaysRented() { return 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; + } + }