ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

范例(Examples)
首先,我从一个简单函数开始:
double getPrice() {
   int basePrice = _quantity * _itemPrice;
   double discountFactor;
   if(basePrice > 1000) discountFactor = 0.95;
   else   discountFactor = 0.98;
   return basePrice * discountFactor;
}

我希望将两个临时变量都替换掉.当然,每次一个.

尽管这里的代码十分清楚,我还是先把临时变量声明为final,检查它们是否的确只被赋值一次:
double getPrice() {
   final int basePrice = _quantity * _itemPrice;
   final double discountFactor;
   if(basePrice > 1000) discountFactor = 0.95;
   else   discountFactor = 0.98;
   return basePrice * discountFactor;
}

这么一来,如果有任何问题,编译器就会警告我.之所以先做这件事,因为如果临时变量不知被赋值一次,我就不该进行这项重构.接下来我开始替换临时变量,每次一个.首先我把赋值(assignment)动作的右侧表达式提炼出来:
double getPrice() {
   final int basePrice = basePrice();
   final double discountFactor;
   if(basePrice > 1000) discountFactor = 0.95;
   else   discountFactor = 0.98;
   return basePrice * discountFactor;
}
private int basePrice() {
   return _quantity * _itemPrice;
}

编译并测试,然后开始使用Inline Temp(119).首先把临时变量basePrice的第一个引用点替换掉:
double getPrice() {
   final int basePrice = basePrice();
   final double discountFactor;
   if(basePrice() > 1000) discountFactor = 0.95;
   else   discountFactor = 0.98;
   return basePrice * discountFactor;
}


编译,测试,下一个.由于[下一个]已经是basePrice的最后一个引用点,所以我把basePrice临时变量的声明式一并摘除:
double getPrice() {
   final double discountFactor;
   if(basePrice() > 1000) discountFactor = 0.95;
   else   discountFactor = 0.98;
   return basePrice() * discountFactor;
}


搞定basePrice之后,我再以类似办法提炼出一个discountFactor():
double getPrice() {
   final double discountFactor = discountFactor();
      return basePrice() * discountFactor;
}
private double discountFactor() {
   if(basePrice() > 1000) return 0.95;
   else   return 0.98;
}

你看,如果我没有把临时变量basePrice替换为一个查询式,将多么难以提炼discountFactor()!

最终,getPrice()变成了这样:
double getPrice() {
      return basePrice() * discountFactor();
}

posted on 2005-08-25 15:14 ivaneeo 阅读(246) 评论(0)  编辑  收藏 所属分类: refactoring-从地狱中重生

只有注册用户登录后才能发表评论。


网站导航: