你想要把某一个算法替换为另一个更清晰的算法。
将函数本体替换为另一个算法。
String foundPerson(String[] person){
for(int i=0;i<person.length;i++){
if(person[i].equals("Don")){
return "Don";
}
if(person[i].equals("John")){
return "John";
}
if(person[i].equals("Kent")){
return "Kent";
}
}
return " ";
}
重构后:
String foundPerson(String[] person){
List candidates=Arrays.asList(new String[]{"Don","John","Kent"});
for(i=0;i<person.length;i++){
if(candidates.contains(person[i]){
return person[i];
}
}
return "";
}
动机:
解决问题有好几种方法,我敢打赌其中一些方法会比另一些简单。算法也是如此。如果你发现做一件事可以有更清晰的方式,就应该以较清晰的方式取代复杂的方式。“重构”可以把一些复杂的东西分解为较简单的小块,但有时你就必须壮士断腕,删除整个算法,代之以较简单的算法。随着对问题有了更多的理解,你往往会发现,在原先的做法之外,有了更简单的解决方案,此时你就需要改变原先的算法。如果你开始使用程序库,而其中提供的某些功能与你自己的代码重复,那么你也需要改变原先的算法。
有时你会想修改原型的算法。让它去做与原先略有差异的事。这时候你也可以先把原先的算法替换为一个较易修改的算法,这样后续的修改就会轻松很多。
使用这项重构手法之前,请先确定自己已经尽可能了解了原先函数。替换一个巨大而复杂的算法是非常困难的。只有先将它分解为较简单的小型函数,然后你才能很有把握的进行算法替换工作。