diff --git a/src/refactoring/ChildrensPrice.java b/src/refactoring/ChildrensPrice.java new file mode 100644 index 0000000..32825d0 --- /dev/null +++ b/src/refactoring/ChildrensPrice.java @@ -0,0 +1,18 @@ +package refactoring; + +public class ChildrensPrice extends Price { + + @Override + double getCharge(int daysRented) { + double result = 1.5; + if (daysRented > 3) + result += (daysRented - 3) * 1.5; + return result; + } + + @Override + int getPriceCode() { + return Movie.CHILDRENS; + } + +} diff --git a/src/refactoring/Movie.java b/src/refactoring/Movie.java index 0adc219..5655a80 100644 --- a/src/refactoring/Movie.java +++ b/src/refactoring/Movie.java @@ -1,53 +1,46 @@ package refactoring; - public class Movie { public static final int CHILDRENS = 2; public static final int REGULAR = 0; public static final int NEW_RELEASE = 1; private String _title; - private int _priceCode; + private Price _price; public Movie(String title, int priceCode) { _title = title; - _priceCode = priceCode; + setPriceCode(priceCode); } - + public double getCharge(int daysRented) { - double result = 0; - // determine amounts for each line - switch (getPriceCode()) { - case Movie.REGULAR: - result += 2; - if (daysRented > 2) - result += (daysRented - 2) * 1.5; - break; - case Movie.NEW_RELEASE: - result += daysRented * 3; - break; - case Movie.CHILDRENS: - result += 1.5; - if (daysRented > 3) - result += (daysRented - 3) * 1.5; - break; - } - return result; + return _price.getCharge(daysRented); } - + public int getFrequentRenterPoints(int daysRented) { - if (getPriceCode() == Movie.NEW_RELEASE - && daysRented > 1) + if (getPriceCode() == Movie.NEW_RELEASE && daysRented > 1) return 2; else return 1; } public int getPriceCode() { - return _priceCode; + return _price.getPriceCode(); } public void setPriceCode(int arg) { - _priceCode = arg; + switch (arg) { + case REGULAR: + _price = new RegularPrice(); + break; + case CHILDRENS: + _price = new ChildrensPrice(); + break; + case NEW_RELEASE: + _price = new NewReleasePrice(); + break; + default: + throw new IllegalArgumentException("Incorrect Price Code"); + } } public String getTitle() { diff --git a/src/refactoring/NewReleasePrice.java b/src/refactoring/NewReleasePrice.java new file mode 100644 index 0000000..d313fba --- /dev/null +++ b/src/refactoring/NewReleasePrice.java @@ -0,0 +1,15 @@ +package refactoring; + +public class NewReleasePrice extends Price { + + @Override + double getCharge(int daysRented) { + return daysRented * 3; + } + + @Override + int getPriceCode() { + return Movie.NEW_RELEASE; + } + +} diff --git a/src/refactoring/Price.java b/src/refactoring/Price.java new file mode 100644 index 0000000..f9cbd29 --- /dev/null +++ b/src/refactoring/Price.java @@ -0,0 +1,9 @@ +package refactoring; + +public abstract class Price { + + abstract double getCharge(int daysRented); + + abstract int getPriceCode(); + +} diff --git a/src/refactoring/RegularPrice.java b/src/refactoring/RegularPrice.java new file mode 100644 index 0000000..39c64e8 --- /dev/null +++ b/src/refactoring/RegularPrice.java @@ -0,0 +1,18 @@ +package refactoring; + +public class RegularPrice extends Price { + + @Override + double getCharge(int daysRented) { + double result = 2; + if (daysRented > 2) + result += (daysRented - 2) * 1.5; + return result; + } + + @Override + int getPriceCode() { + return Movie.REGULAR; + } + +}