diff --git a/.idea/compiler.xml b/.idea/compiler.xml index d6da3ff..15e1639 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -13,18 +13,7 @@ - - - - - - - - - - - - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 28e766a..096cb5b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,7 +11,7 @@ - + diff --git a/README.md b/README.md index 3d9934e..19e58c5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,4 @@ -Rental Store +rentalStore =========== -Java refactoring example by Martin Fowler -Example forn first chapter of book. - -Download book here http://share.auditory.ru/2009/Roman.Novikov/refactoring.pdf +Java refactoring example by Martin Fowler \ No newline at end of file diff --git a/rentalStore.iml b/rentalStore.iml index 873c6e9..c7fac17 100644 --- a/rentalStore.iml +++ b/rentalStore.iml @@ -5,8 +5,8 @@ - + diff --git a/src/main/java/org/kranonit/rentalStore/Customer.java b/src/main/java/org/kranonit/rentalStore/Customer.java index 3ce1022..bdefc47 100644 --- a/src/main/java/org/kranonit/rentalStore/Customer.java +++ b/src/main/java/org/kranonit/rentalStore/Customer.java @@ -26,51 +26,48 @@ public String statement() { Rental each = (Rental) rentals.nextElement(); // show figures for this rental result += "\t" + each.getMovie().getTitle() + "\t" - + String.valueOf(each.getCharge()) + "\n"; + + String.valueOf( each.getCharge() ) + "\n"; } // add footer lines - result += "Amount owed is " + String.valueOf(getTotalCharge()) + "\n"; - result += "You earned " + String.valueOf(getTotalFrequentRenterPoints()) + result += "Amount owed is " + String.valueOf( getTotalCharge() ) + "\n"; + result += "You earned " + String.valueOf( getTotalFrequentRenterPoints() ) + " frequent renter points"; return result; } public String htmlStatement() { - Enumeration rentals = _rentals.elements(); - String result = "<Н1>0перации аренды для <ЕМ>" + getName() + "

\n"; + Enumeration rentals = _rentals.elements(); + String result = "

Rental Record for " + getName() + "

\n"; while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); - // показать результаты по каждой аренде - result += each.getMovie().getTitle() + - String.valueOf(each.getCharge()) + "
\n"; + // show figures for this rental + result += each.getMovie().getTitle() + ": " + + String.valueOf( each.getCharge() ) + "
\n"; } - //добавить нижний колонтитул - result += "<Р>Ваша задолженность составляет <ЕМ>" + - String.valueOf(getTotalCharge()) + "

\n"; - result += "На этой аренде вы заработали <ЕМ>" + - String.valueOf(getTotalFrequentRenterPoints()) + " очков за активность<Р>"; + // add footer lines + result += "

Amount owed is " + String.valueOf( getTotalCharge() ) + "

\n"; + result += "You earned " + String.valueOf( getTotalFrequentRenterPoints() ) + + " frequent renter points

"; return result; } - private double getTotalCharge() { - double result = 0; - Enumeration rentals = _rentals.elements(); + private double getTotalCharge(){ + double totalCharge = 0; + Enumeration rentals = _rentals.elements(); while (rentals.hasMoreElements()) { - Rental each = (Rental)rentals.nextElement(); - result += each.getCharge(); + Rental each = (Rental) rentals.nextElement(); + totalCharge += each.getCharge(); } - return result; + return totalCharge; } private int getTotalFrequentRenterPoints(){ - int result = 0; - Enumeration rentals = _rentals.elements(); + int totalPoints = 0; + Enumeration rentals = _rentals.elements(); while (rentals.hasMoreElements()) { Rental each = (Rental) rentals.nextElement(); - result += each.getFrequentRenterPoints(); + totalPoints += each.getFrequentRenterPoints(); } - return result; + return totalPoints; } - - } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Main.java b/src/main/java/org/kranonit/rentalStore/Main.java index 8b6f5f8..17cb770 100644 --- a/src/main/java/org/kranonit/rentalStore/Main.java +++ b/src/main/java/org/kranonit/rentalStore/Main.java @@ -12,7 +12,9 @@ public static void main(String[] args) { c.addRental(new Rental(m2, 4)); c.addRental(new Rental(m3, 5)); c.addRental(new Rental(m4, 6)); - System.out.println(c.statement()); + System.out.print(c.statement()); + System.out.print( "\n\nVersion for HTML:\n\n" ); + System.out.print(c.htmlStatement()); } } \ No newline at end of file diff --git a/src/main/java/org/kranonit/rentalStore/Movie.java b/src/main/java/org/kranonit/rentalStore/Movie.java index f29968d..3b16e02 100644 --- a/src/main/java/org/kranonit/rentalStore/Movie.java +++ b/src/main/java/org/kranonit/rentalStore/Movie.java @@ -5,11 +5,11 @@ public class Movie { public static final int REGULAR = 0; public static final int NEW_RELEASE = 1; private String _title; - Price _price; + private Price _price; public Movie(String title, int priceCode) { _title = title; - setPriceCode(priceCode); + setPriceCode( priceCode ); } public int getPriceCode() { @@ -17,13 +17,13 @@ public int getPriceCode() { } public void setPriceCode(int arg) { - switch (arg) { - case REGULAR: - _price = new RegularPrice(); - break; + switch (arg){ case CHILDRENS: _price = new ChildrensPrice(); break; + case REGULAR: + _price = new RegularPrice(); + break; case NEW_RELEASE: _price = new NewReleasePrice(); break; @@ -32,15 +32,15 @@ public void setPriceCode(int arg) { } } - double getCharge(int daysRented) { - return _price.getCharge(daysRented); - } - public String getTitle() { return _title; } - int getFrequentRenterPoints(int daysRented) { + 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/org/kranonit/rentalStore/Price.java b/src/main/java/org/kranonit/rentalStore/Price.java index 53a6a71..887fa08 100644 --- a/src/main/java/org/kranonit/rentalStore/Price.java +++ b/src/main/java/org/kranonit/rentalStore/Price.java @@ -1,52 +1,52 @@ package org.kranonit.rentalStore; abstract class Price { + abstract int getPriceCode(); - abstract double getCharge(int daysRented); + abstract double getCharge( int daysRented ); - int getFrequentRenterPoints(int daysRented) { - return 1; + public int getFrequentRenterPoints( int daysRented ){ + if ((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1) + return 2; + return 1; } } -class ChildrensPrice extends Price { - int getPriceCode() { - return Movie.CHILDRENS; +class RegularPrice extends Price { + + int getPriceCode(){ + return Movie.REGULAR; } - double getCharge(int daysRented) { - double result = 1.5; - if (daysRented > 3) { - result += (daysRented - 3) * 1.5; - } + double getCharge( int daysRented ){ + double result = 2; + if (daysRented > 2) + result += (daysRented - 2) * 1.5; return result; } } class NewReleasePrice extends Price { - int getPriceCode() { + + int getPriceCode(){ return Movie.NEW_RELEASE; } - double getCharge(int daysRented) { + double getCharge( int daysRented ){ return daysRented * 3; } - - int getFrequentRenterPoints(int daysRented) { - return (daysRented > 1) ? 2 : 1; - } } -class RegularPrice extends Price { - int getPriceCode() { - return Movie.REGULAR; +class ChildrensPrice extends Price { + + int getPriceCode(){ + return Movie.CHILDRENS; } - double getCharge(int daysRented){ - double result = 2; - if (daysRented > 2) { - result += (daysRented - 2) * 1.5; - } + double getCharge( int daysRented ){ + double result = 1.5; + if (daysRented > 3) + result += (daysRented - 3) * 1.5; return result; } } diff --git a/src/main/java/org/kranonit/rentalStore/Rental.java b/src/main/java/org/kranonit/rentalStore/Rental.java index bf03032..13f797d 100644 --- a/src/main/java/org/kranonit/rentalStore/Rental.java +++ b/src/main/java/org/kranonit/rentalStore/Rental.java @@ -3,6 +3,7 @@ class Rental { private Movie _movie; + private int _daysRented; public Rental(Movie movie, int daysRented) { @@ -11,15 +12,14 @@ public Rental(Movie movie, int daysRented) { } public double getCharge() { - return _movie.getCharge(_daysRented); + return _movie.getCharge( getDaysRented() ); } - public int getFrequentRenterPoints() { - - return _movie.getFrequentRenterPoints(_daysRented); + public int getFrequentRenterPoints(){ + return _movie.getFrequentRenterPoints( getDaysRented() ); } - public int getDaysRented() { + public int getDaysRented() { return _daysRented; } diff --git a/src/test/java/org/kranonit/rentalStore/CustomerTest.java b/src/test/java/org/kranonit/rentalStore/CustomerTest.java index 94da5cb..431c9b9 100644 --- a/src/test/java/org/kranonit/rentalStore/CustomerTest.java +++ b/src/test/java/org/kranonit/rentalStore/CustomerTest.java @@ -22,7 +22,7 @@ public void testStatement() throws Exception { c.addRental(new Rental(m3, 5)); c.addRental(new Rental(m4, 6)); String statementResult = c.statement(); - System.out.println(statementResult); + System.out.print(statementResult); Assert.assertEquals("Rental Record for stokito\n" + "\tЗа двумя зайцами\t3.5\n" + "\tВсё просто\t12.0\n" + @@ -33,7 +33,7 @@ public void testStatement() throws Exception { } @Test - public void testHtmlStatement() throws Exception { + public void testHTMLStatement() throws Exception { Movie m1 = new Movie("За двумя зайцами", Movie.REGULAR); Movie m2 = new Movie("Всё просто", Movie.NEW_RELEASE); Movie m3 = new Movie("Хоббит", Movie.CHILDRENS); @@ -44,13 +44,14 @@ public void testHtmlStatement() throws Exception { c.addRental(new Rental(m2, 4)); c.addRental(new Rental(m3, 5)); c.addRental(new Rental(m4, 6)); - String htmlStatementResult = c.htmlStatement(); - Assert.assertEquals("<Н1>0перации аренды для <ЕМ>stokito

\n" + - "За двумя зайцами3.5
\n" + - "Всё просто12.0
\n" + - "Хоббит4.5
\n" + - "Альф18.0
\n" + - "<Р>Ваша задолженность составляет <ЕМ>38.0

\n" + - "На этой аренде вы заработали <ЕМ>6 очков за активность<Р>", htmlStatementResult); + String statementResult = c.htmlStatement(); + System.out.print(statementResult); + Assert.assertEquals("

Rental Record for stokito

\n" + + "За двумя зайцами: 3.5
\n" + + "Всё просто: 12.0
\n" + + "Хоббит: 4.5
\n" + + "Альф: 18.0
\n" + + "

Amount owed is 38.0

\n" + + "You earned 6 frequent renter points

", statementResult); } }