重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
学会重构是一项非常重要的技能,写程序是一项艺术,我们的代码要尽可能的优雅。
下面是一个android的代码段 代码段是一个回调函数,回调函数中实现了很多的功能, 这段代码实现的功能是当用户点击UPDATE对应的按钮时,执行从URL指定的xml文件中取回数据,然后更新在ListView中, 这个程序段实现了这个功能但是仅仅实现功能是不够的,这段代码是相当丑陋的, 一个方法应该实现尽可能单一的功能,这不仅能让我们的代码的重用性更高,增强功能的扩展性,还能使我们的代码看起了更加的优雅。
public boolean onOptionsItemSelected(MenuItem item) {
// 相应用户的点击信息,下载相应的mp3
if(item.getItemId() == UPDATE ){
}else if(item.getItemId() == ABOUT){
//下载包含MP3基本信息的文件
String xml = downloadXML(URL);
//对xml文件进行解析,并将解析的结果放到Mp3Infor中
List<Mp3Infor> mp3Infors = parse(xml);
//生成一个List对象,并按照SimpleAdapter要求生成map;
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
for(Iterator iterator = mp3Infors.iterator(); iterator.hasNext();){
Mp3Infor mp3Infor = (Mp3Infor)iterator.next();
HashMap<String, String> map = new HashMap<String, String>();
map.put("mp3_name", mp3Infor.getMp3Name());
map.put("mp3_size", mp3Infor.getMp3Size());
list.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(
this,
list,
R.layout.mp3info_item,
new String[]{"mp3_name", "mp3_size"},
new int[]{R.id.mp3_name, R.id.mp3_size});
setListAdapter(simpleAdapter );
}
return super.onOptionsItemSelected(item);
}
现在我们就来实现重构
private void updateListView(){
//下载包含MP3基本信息的文件
String xml = downloadXML(URL);
//对xml文件进行解析,并将解析的结果放到Mp3Infor中
List<Mp3Infor> mp3Infors = parse(xml);
//生成一个List对象,并按照SimpleAdapter要求生成map;
setListAdapter(buildSimpleAdapter(mp3Infors));
}
private SimpleAdapter buildSimpleAdapter(List<Mp3Infor> mp3Infors){
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
for(Iterator iterator = mp3Infors.iterator(); iterator.hasNext();){
Mp3Infor mp3Infor = (Mp3Infor)iterator.next();
HashMap<String, String> map = new HashMap<String, String>();
map.put("mp3_name", mp3Infor.getMp3Name());
map.put("mp3_size", mp3Infor.getMp3Size());
list.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(
this,
list,
R.layout.mp3info_item,
new String[]{"mp3_name", "mp3_size"},
new int[]{R.id.mp3_name, R.id.mp3_size});
return simpleAdapter;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 相应用户的点击信息,下载相应的mp3
if(item.getItemId() == UPDATE ){
updateListView();
}else if(item.getItemId() == ABOUT){
}
return super.onOptionsItemSelected(item);
}
看看这样以来 我们的回调函数就显得多么的优雅, 而且updateListView 方法可以在其它地方调用, 需要修改时也只需要修改updateListView 这个方法就行了。
分享到:
相关推荐
本代码是《重构 改善既有代码的设计》书中的第一个案例,用于影片出租点用的程序,对于原始代码的几次重构
代码重构总结实例
书中通过许多实际例子,详细说明了数据库重构的过程、策略以及部署。. 本书前5章介绍了演进式数据库开发的基本思想和技术,后6章详细描述了每一类重构,包括结构、数据质量、参照完整性、架构、方法的重构;另外还...
关于c#中窗体重构的问题 图文并茂 真实例子 希望对大家有所帮助
Java 代码 重构 实例 指南 ,欢迎下载
一个关于matlab进行三维图像重构的小例子,初学者可以用以借鉴。
此页面本是《REACT:引领未来的用户界面开发框架》例子,不过所用技术仅仅是React Flux,所以小生把它重构了一下!
1.重构要求 2.重构的工作 3.代码的bad smell 4. 重构的例子
MATALB小波例子5个,涉及图象分解和图象重构
两本电子书《31天重构速成》《重构与模式》全是pdf的,其中第二本是英文的。 还有我写的一套.net MVC文章。 打包赚分儿。
《重构》一书中Replace Conditional With Polymorphism方法的实现,将注释的部分写回是重构前的情形,注释后是重构完成后的结果。
小波分解后,直接FFT发现多出不少错误【不应该存在】的频率,改进后能正确的重构。可以直接运行,对初学者是个不错的例子。
重构中的源码,可能对照重构的书籍进行阅读 对源码的处理,都是例子中的JAVA代码
令A为一个由N个已特殊排序数组成的数列:A1,A2,…,AN,其中A1=0。令B为N(N-1)/2个数(定义为Dij=Ai-Aj(i>j))组成的数列。例如,A=0,1,5,8,那么D=1,3,4,5,7,8。请完成: a)编写程序,根据A构造D; ...
Chapter 1:Refactoring,a First Example 重构,第一个例子 The Starting Point 起点 The First Step in Refactoring 重构第一步 Decomposing and Redistributing the Statement Method 分解并重组...
网站重构方案 最好的重构参考例子 可以更好的为自己网站重构时提供宝贵意见
该代码介绍了小波分解系数的提取,重构,以及强阈值去噪,例子很好!
Chapter 1:Refactoring,a First Example 重构,第一个例子 The Starting Point 起点 The First Step in Refactoring 重构第一步 Decomposing and Redistributing the Statement Method 分解并重组...
用区块链重构社会的故事