现在我运用同样手法处理getFrequentRenterPoints()。重构前的样子如下:
class Movie...
int getFrequentRenterPoints(int daysRented) {
if((getPriceCode() == Movie.NEW_RELEASE) && daysRented > 1)
return 2;
else
return 1;
}
首先我把这个函数移到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函数声明为abstract。我只是为[新片类型]产生一个覆写函数(override method),并在superclass内留下一个已定义的函数,使它成为一种缺省行为。
class NewReleasePrice
int getFrequentRenterPoints(int daysRented) {
return (daysRented > 1) ? 2 : 1;
}
class Price...
int getFrequentRenterPoints(int daysRented) {
return 1;
}