現(xiàn)在我運(yùn)用同樣手法處理getFrequentRenterPoints()。重構(gòu)前的樣子如下:
class Movie...
int getFrequentRenterPoints(int daysRented) {
if((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1)
return 2;
else
return 1;
}
首先我把這個(gè)函數(shù)移到Price class里頭:
class Movie...
int getFrequentRenterPoints(int daysRented) {
return _price.getFrequentPoints(daysRented);
}
class Price...
int getFrequentRenterPoints(int daysRented) {
if((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1)
return 2;
else
return 1;
}
但是這一次我不把superclass函數(shù)聲明為abstract。我只是為[新片類(lèi)型]產(chǎn)生一個(gè)覆寫(xiě)函數(shù)(override method),并在superclass內(nèi)留下一個(gè)已定義的函數(shù),使它成為一種缺省行為。
class NewReleasePrice
int getFrequentRenterPoints(int daysRented) {
return (daysRented > 1) ? 2 : 1;
}
class Price...
int getFrequentRenterPoints(int daysRented) {
return 1;
}