很明显看出来,htmlStatement()和statement()是不同的。现在,我应该脱下[重构]的帽子,戴上[添加功能]的帽子,戴上[添加功能]的帽子。我可以像下面这样编写htmlStatement(),并添加相应测试:
public String htmlStatement() {
Enumeration rentals = _rentals.elements();
String result = "<H1>Rental Record for <EM> " + getName() + "</EM></H1><P>\n";
while(rentals.hasMoreElements()) {
Rental each = (Rental)rentals.nextElement(); //取得一笔租借记录
result += each.getMovie().getTitle() + ":" +
String.valueOf(each.getCharge()) + "<BR>\n";
}
// add footer lines(结尾打印)
result += "<P>You owe <EM>" + String.valueOf(getTotalCharge()) + "</EM><P> \n";
result += "On this rental you earned <EM>" + String.valueOf(getTotalfrequentRenterPoints()) +
"</EM>frequent renter points<P>";
return result;
}
通过计算逻辑的提炼,我可以完成一个htmlStatement(),并复用(reuse)原本statement()内的所有计算。我不必剪剪贴贴,所以如果计算规则发生改变,我只需在程序中做一处修改。