首页 > 代码库 > 重构_改善既有代码的设计第一章重构例子

重构_改善既有代码的设计第一章重构例子

/** *  */package statedesignmodel;import java.util.Enumeration;import java.util.Vector;/** * @author Administrator * */public class Customer {    private String _name;    private Vector<Rental> _rentals = new Vector<Rental>();    public Customer(String name) {        this._name = name;    }    public void addRental(Rental arg) {        this._rentals.addElement(arg);    }    public String getName() {        return _name;    }    public String statement() {        double totalAmount = 0;        int frequentRenterPoints = 0;        Enumeration<Rental> rentals = this._rentals.elements();        String result = "Rental Record for " + this.getName() + "\n";        while (rentals.hasMoreElements()) {            double thisAmount = 0;            Rental each = (Rental) rentals.nextElement();            switch (each.getMovie().getPriceCode()) {            case Movie.REGULAR:                thisAmount += 2;                if (each.getDaysRented() > 2) {                    thisAmount += (each.getDaysRented() - 2) * 1.5;                    break;                }            case Movie.NEW_RELEASE:                thisAmount += each.getDaysRented() * 3;                break;            case Movie.CHILDRENS:                thisAmount += 1.5;                if (each.getDaysRented() > 3) {                    thisAmount += (each.getDaysRented() - 3) * 1.5;                    break;                }            }            // add frequent renter points            frequentRenterPoints++;            // add bonus for a two day new release rental            if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE)                    && each.getDaysRented() > 1) {                frequentRenterPoints++;            }            // show figures for this rental            result += "\t" + each.getMovie().getTitle() + "\t"                    + String.valueOf(thisAmount) + "\n";            totalAmount += thisAmount;        }        // add footer lines        result += "Amount owed is " + String.valueOf(totalAmount) + "\n";        result += "You earned " + String.valueOf(frequentRenterPoints)                + " frequent renter points";        return result;    }}

 

/** *  */package statedesignmodel;/** * @author Administrator * */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;    public Movie(String title, int priceCode) {        this._title = title;        this._priceCode = priceCode;    }    public String getTitle() {        return _title;    }    public void setTitle(String _title) {        this._title = _title;    }    public int getPriceCode() {        return _priceCode;    }    public void setPriceCode(int _priceCode) {        this._priceCode = _priceCode;    }}

 

/** *  */package statedesignmodel;/** * @author Administrator * */public class Rental {    private Movie _movie;    private int _daysRented;    public Rental(Movie movie, int daysRented) {        this._movie = movie;        this._daysRented = daysRented;    }    public Movie getMovie() {        return _movie;    }    public int getDaysRented() {        return _daysRented;    }}

 

重构_改善既有代码的设计第一章重构例子