搬移[金額計(jì)算]代碼
觀察amountFor()時(shí),我發(fā)現(xiàn)這個(gè)函數(shù)使用了來(lái)自Rental class的信息,卻沒有使用來(lái)自Customer class的信息.
class Customer...
public double amountFor(Rental aRental) {
double result = 0;
switch(aRental.getMovie().getPriceCode()) { //取得影片出租價(jià)格
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;
}
這立刻使我懷疑它是否被放錯(cuò)了位置.大多數(shù)情況下,函數(shù)應(yīng)該放在它使用的數(shù)據(jù)的所屬object(或說(shuō)class)內(nèi),所以amountFor()應(yīng)該移 到Rental class去.為了這么做,我要運(yùn)用Move Method(142).首先把代碼拷貝到Rental class內(nèi),調(diào)整代碼使之適應(yīng)新家,然后重新編譯.下面這樣:
class Rental...
double getCharge() {
double result = 0;
switch(getMovie().getPriceCode()) { //取得影片出租價(jià)格
case Movie.REGULAR: //普通片
result+= 2;
if(getDaysRented() > 2)
result+= (getDaysRented() - 2) * 1.5;
break;
case Movie.NEW_RELEASE: //新片
result+= getDaysRented() * 3;
break;
case Movie.CHILDRENS: //兒童片
result+= 1.5;
if(getDaysRented() > 3)
result+= (getDaysRented() - 3) * 1.5;
break;
}
return result;
}
這個(gè)例子里,[適應(yīng)新家]意味去掉參數(shù).此外,我還要在搬移的同時(shí)變更函數(shù)名稱.
現(xiàn)在我可以測(cè)試新函數(shù)是否正常工作.只要改變Customer.amountFor()函數(shù)內(nèi)容,使它委托(delegate)新函數(shù)即可:
class Customer...
private double amountFor(Rental aRental) {
return aRental.getCharge();
}
觀察amountFor()時(shí),我發(fā)現(xiàn)這個(gè)函數(shù)使用了來(lái)自Rental class的信息,卻沒有使用來(lái)自Customer class的信息.
class Customer...
public double amountFor(Rental aRental) {
double result = 0;
switch(aRental.getMovie().getPriceCode()) { //取得影片出租價(jià)格
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;
}
這立刻使我懷疑它是否被放錯(cuò)了位置.大多數(shù)情況下,函數(shù)應(yīng)該放在它使用的數(shù)據(jù)的所屬object(或說(shuō)class)內(nèi),所以amountFor()應(yīng)該移 到Rental class去.為了這么做,我要運(yùn)用Move Method(142).首先把代碼拷貝到Rental class內(nèi),調(diào)整代碼使之適應(yīng)新家,然后重新編譯.下面這樣:
class Rental...
double getCharge() {
double result = 0;
switch(getMovie().getPriceCode()) { //取得影片出租價(jià)格
case Movie.REGULAR: //普通片
result+= 2;
if(getDaysRented() > 2)
result+= (getDaysRented() - 2) * 1.5;
break;
case Movie.NEW_RELEASE: //新片
result+= getDaysRented() * 3;
break;
case Movie.CHILDRENS: //兒童片
result+= 1.5;
if(getDaysRented() > 3)
result+= (getDaysRented() - 3) * 1.5;
break;
}
return result;
}
這個(gè)例子里,[適應(yīng)新家]意味去掉參數(shù).此外,我還要在搬移的同時(shí)變更函數(shù)名稱.
現(xiàn)在我可以測(cè)試新函數(shù)是否正常工作.只要改變Customer.amountFor()函數(shù)內(nèi)容,使它委托(delegate)新函數(shù)即可:
class Customer...
private double amountFor(Rental aRental) {
return aRental.getCharge();
}