日期:2014-05-20  浏览次数:20680 次

这是为什么?
在重构这本书看到以下内容
Java code

double getPrice(){
  int basePaice=quantity*ite3mPrice;
  double discountFactor;
  if(basePrice>1000)discountFactor=0.95;
  else discountFactor=0.98;
  return basePrice * discountFactor;
}
//这个方法被重构成
double getPrice(){
  double discountFactor;
  if(basePrice()>1000)discountFactor=0.95;
  else discountFactor=0.98;
  return basePrice()* discountFactor;
}

double basePrice(){
  return quantity*ite3mPrice;
}



个人觉得这样会多次使用到basePrice().每次使用时候都需要quantity*ite3mPrice 计算。
这样不就是程序运行起来更加复杂了么。 
这样做是否真的有必要,求大鸟提点。谢谢

------解决方案--------------------
重构是函数名相同,但参数列表不同,即相同的函数名用不同的参数实现不同的功能,一般出现在一个类的内部。重写主要是子类重写父类的方法,方法的名称、参数、返回值都相同,即通过子类重写父类已实现的方法达到新的方法定义


不知道你那到底算什么
------解决方案--------------------
把一样的操作都放到一起,这算是抽象吧。其实更准确点说,既然这个操作是大家都要做的,那么放到一起有利于程序维护。以为你改代码的时候只改一处就行了,而不是改散落到各处的代码,这样容易漏掉。
------解决方案--------------------
能重复利用到的代码~~~可以考虑单独拿出来便于维护修改~·~
------解决方案--------------------
不知道LZ的具体业务需求
可以这么考虑,如果没有打折,那么获取的价格就是基本价格,所以提供获取基本价格方法也不是不合理
而打折价,就是在基本价格的基础上做处理
为了避免方法多次调用,理论上可以在方法体内部用个临时变量保存basePrice的返回值,用临时变量计算就可以了

如果涉及到多线程,还要考虑同步问题