本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42582611
在上一篇文章中介绍了“以函数取代函数对象”。本文将介绍“替换算法”这种重构手法。
下面让我们来学习这种重构手法吧。
发现:你想要把某个算法替换为另一个更清晰的算法。
解决:将函数本体替换为另一个算法。
//重构前 String foundPerson(String[] people){ for (int i = 0; i < people.length; i++) { if(people[i].equals("Don")){ return "Don"; } if(people[i].equals("John")){ return "John"; } if(people[i].equals("Dave")){ return "Dave"; } } return ""; }
//重构后 String foundPerson(String[] people){ List<String> candidates = Arrays.asList(new String[]{"Don","John","Dave"}); for (int i = 0; i < people.length; i++) { if(candidates.contains(people[i])){ return people[i]; } } return ""; }
解决问题的方法往往会有很多种,但是其中总会有一些方法比另一些简单。算法也是如此。如果你发现做一件事可以有更加清晰的方式,就应该以清晰的方式取代复杂的方式。“重构”可以把一些复杂东西分解为较简单的小块,当有时候你就必须删除整个算法,待之以简单的算法。
随着对问题有了更多了解,你往往会发现,在原先的做法之外,有更简单的解决方案,此时,你就需要改变原先的算法,使之变得更加清晰、简洁。
在使用这项重构手法之前,你需要确定自己已经尽可能分解原先函数。替换一个巨大而复杂的算法是非常困难的,只有先将它分解为较简单的小型函数,然后你才能很有把握地进行算法替换工作。
原文地址:http://blog.csdn.net/pistolove/article/details/42582611