Movie().getPriceCode())==Movie.NEW_RELEASE &&each.getDaysRented()>1)
frequentRenterPoints ++;
result += " " + each.getMovie().getTitle() + " " +String.valueOf(thisAmount) + " ";
totalAmount += thisAmount;
}
result += "Amount owed is " + String.valueOf(totalAmount) + " ";
result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points";
return result;
}
/**
* @param each
* @return
*/
private double amountFor(Rental each) {
double thisAmount = 0;
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;
}
return thisAmount;
}
2、选中amountFor()的参数each,在右键菜单中选择"重构/重命名",在对话框中输入新的名称:aRental,选择确定,amountFor()中所有each的引用全部被替换成新的名称。用同样的办法修改amountFor()中的局部变量thisAmount为result。重构后的amountFor()代码如下:
/**
* @param aRental
* @return
*/
private double amountFor(Rental aRental) {
double result = 0;
switch(aRental.getMovie().getPriceCode()){
case Movie.REGULAR:
result += 2;
if(aRental.getDaysRented()>2)
result += (aRental.getDaysRented()-2)*1.5;
break;
case Movie.NEW_RELEASE:
result += aRental.getDaysRented()*3;
break;
case Movie.CHILDRENS:
result += 1.5;
if(aRental.getDaysRented()>3)
result += (aRental.getDaysRented()-3)*1.5;
break;
}
return result;
}
三、重构第二步:搬移"金额计算"代码
目的:
1、 将函数amountFor()转移到Rental类中,并更名为getCharge()。
2、 更新并替换所有对amountFor()的引用。
重构方法:
Move Method
Change Method signatrue
Inline Method
Inline Temp
方法:
1、选中函数amountFor()的定义,在右键菜单中选择"重构/移动",显示参数设置对话框。把新方法名改成getCharge。按下"确定"按钮,Customer Class中的amountFor()函数被移动到Rental Class中,并更名为:getCharge()。

同时eclipse自动在Customer的amountFor()函数中添加一行对新函数的"委托"代码:
private double amountFor(Rental aRental) {
return aRental.getCharge();
}
这行代码会产生编译错误,原因是amountFor()的private型被传递到了新的方法中:
/**
* @param this
* @return
*/
private double getCharge() {
……
}
2、继续重构!选中getCharge()方法,在右键菜单中选择"重构/更改方法特征符",弹出参数选择对话框,把访问修饰符从private改成public。Eclipse的编译错误提示自动消失。

3、回到Customer类,把所有对amountFor()引
上一页 [1] [2] [3] [4] [5] 下一页