Skip to content

Commit

Permalink
conditional logic to polymorphysm
Browse files Browse the repository at this point in the history
  • Loading branch information
moloch committed Apr 15, 2014
1 parent 03aeb32 commit 8b16e57
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 27 deletions.
18 changes: 18 additions & 0 deletions src/refactoring/ChildrensPrice.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
47 changes: 20 additions & 27 deletions src/refactoring/Movie.java
Original file line number Diff line number Diff line change
@@ -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() {
Expand Down
15 changes: 15 additions & 0 deletions src/refactoring/NewReleasePrice.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
9 changes: 9 additions & 0 deletions src/refactoring/Price.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package refactoring;

public abstract class Price {

abstract double getCharge(int daysRented);

abstract int getPriceCode();

}
18 changes: 18 additions & 0 deletions src/refactoring/RegularPrice.java
Original file line number Diff line number Diff line change
@@ -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;
}

}

0 comments on commit 8b16e57

Please sign in to comment.