首页 > 代码库 > 替换算法
替换算法
本文是在学习中的总结,欢迎转载但请注明出处: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 ""; }
动机
解决问题的方法往往会有很多种,但是其中总会有一些方法比另一些简单。算法也是如此。如果你发现做一件事可以有更加清晰的方式,就应该以清晰的方式取代复杂的方式。“重构”可以把一些复杂东西分解为较简单的小块,当有时候你就必须删除整个算法,待之以简单的算法。
随着对问题有了更多了解,你往往会发现,在原先的做法之外,有更简单的解决方案,此时,你就需要改变原先的算法,使之变得更加清晰、简洁。
在使用这项重构手法之前,你需要确定自己已经尽可能分解原先函数。替换一个巨大而复杂的算法是非常困难的,只有先将它分解为较简单的小型函数,然后你才能很有把握地进行算法替换工作。
做法
重构笔记文章如下
重构笔记——入门篇
重构笔记——代码的坏味道(上)
重构笔记——代码的坏味道(下)
重构笔记——构筑测试体
重构笔记——提炼函数
重构笔记——内联函数
重构笔记——内联临时变量
重构笔记——以查询取代临时变量
重构笔记——引入解释性变量
重构笔记——分解临时变量
重构笔记——移除对参数的赋值 重构笔记——以函数对象取代函数
替换算法