本系列来自《java 重构改善既有代码的设计》一书
如:将一个临时变量temp保存到某一个表达式的运行结果。
做法将这个表达式提炼到一个独立函数(所谓查询式:Query),将这个临时变量的所有替换为新函数的调用。新函数可以被其它地方引用。
public double getPrice(){
double basePrice = itemPrice * quantity;
if(basePrice > 1000) {
return basePrice * 0.95;
} else {
return basePrice * 0.98;
}
}
可以写成:
public double getPrice() {
if (basePrice() > 1000) {
return basePrice() * 0.95;
} else {
return basePrice() * 0.98;
}
}
public double basePrice() {
return itemPrice * quantity;
}
考虑到临时变量只是暂时的,而且只能在所属函数内部使用,由于临时变量只有在所属函数内部使用,所以会驱使你写出更长的函数,因为只有这样你才能访问到要访问的临时变量。而如果把临时变量替换成为一个查询式(query method),那么同一个类的所有函数都能获取这份信息。
以查询替换临时变量往往是提炼方法(Extract Method)前必不可少的步骤,因为局部变量会让代码难以提炼,所以应该尽可能把他们替换成查询式。
做法:
1、找出只被赋值一次的临时变量(如果某个变量被赋值超过一