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

/**

 * 

 */

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;

    }



}

 

你可能感兴趣的:(代码)