论坛首页 Java企业应用论坛

实践中的重构30_不做油漆匠

浏览 1214 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-08-15  
油漆匠的故事是编程文化中的一个著名故事。本地化如下。
小强毕业后得到一份街道办油漆匠的工作,工作内容是在马路中间喷涂油漆画线。上班第一天,他拿出一罐环保漆来到他负责的路段,喷涂了300米长的线。“小伙子很给力啊!”街道办徐大妈称赞道,然后给了他300大洋作为工钱。第二天,小强只喷涂了150米。“是不是昨晚没有睡好啊。算了,还是比原来的老王头麻利多了,还是小伙子干活又好又快啊。”徐大妈又掏了150大洋。第三天,小强只喷涂了30米长的马路。“才30米,怎么搞的!明天不用来了!”徐大妈已经不能忍受了。小强一边擦汗,一边委屈的说:“徐大妈,累死我了,现在画一点线要跑好远,油漆罐太远了。”
大家都是当笑话看,可惜这个笑话时不时的发生在你我身上。
public ArrayList<String> generateWords_0(String[] lines) {
ArrayList<String> uniques = new ArrayList<String>();
for (int i = 0; i < lines.length; i++) {
List<String> words = split(lines[i]);
for (int j = 0; j < words.size(); j++)
if (!uniques.contains(words.get(j)))
uniques.add(words.get(j));

}
return uniques;
}
一边看这段程序,一边想着油漆匠的故事。油漆匠离我们并不遥远。
这段程序可以使用java集合框架类的特性重构如下。
注意,这段代码的需求必须返回单词的列表集合,但是不关心单词的顺序。
public List<String> generateWords_1(String[] lines) {
Set<String> words = new HashSet<String>();
for (String line : lines) {
words.addAll(split(line));
}
return new ArrayList<String>(words);
}
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics