`
huakewoniu
  • 浏览: 47662 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

一个关于重构的小例子

阅读更多

重构(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 这个方法就行了。

 

 

分享到:
评论

相关推荐

    关于软件重构技术的ppt

    软件重构是软件开发过程中的一个重要环节,它涉及对已有代码结构的改进,目的是提升代码的可读性、可维护性和整体质量,而不改变其外在行为。本PPT("重构.ppt")将深入探讨这个主题,通过实例演示如何进行有效的...

    代码重构总结实例

    - 参数对象:当函数参数过多时,创建一个对象来封装这些参数。 - 值对象:用于表示不可变数据,增加代码安全性。 - 重构循环:将循环逻辑转换为递归,或反之。 4. **相关工具**: - Eclipse:集成开发环境,...

    《重构——改善既有代码的设计》第一个案例代码

    3. **提取方法**: 如果一个函数或方法包含多个步骤,将其拆分为更小、更专注的函数,这样可以使每个函数都具有单一职责,提高代码的可读性。 4. **提炼类与方法**: 当类或方法的职责不明确,或者名字无法准确反映其...

    利用小波变换对图像进行分解和重构

    小波变换是数字信号处理和图像分析领域中的一个重要工具,它结合了时域和频域分析的优点,能够对信号或图像进行多尺度分析。在图像处理中,小波变换常用于图像的分解与重构,这一过程有助于提取图像的特征,进行去噪...

    Java 代码重构实例

    如果一段代码在多个地方重复,那么将其封装到一个单独的方法中是个好主意,这有助于减少代码重复和提高可维护性。例如: 原始代码: ```java public boolean isStartAfter(Date date) {...} public boolean ...

    matlab三维重构代码

    一个关于matlab进行三维图像重构的小例子,初学者可以用以借鉴。

    31重构 模式与重构 MVC实例

    《31天重构速成》这本书可能以31个独立的主题或技巧为线索,每天学习一个,逐步引导读者掌握重构的精髓。这可能包括识别代码坏味道、使用提取方法、引入解释性变量、移动函数等重构技术。通过这种方式,读者可以在短...

    Java重构示例一.docx

    一个经典的例子是消除冗余条件语句。重构前的代码可能会包含if-else结构,如: ```java if (flag == 1) { return true; } else { return false; } ``` 重构后的代码则可以简化为: ```java return flag == 1; `...

    react-旨在重构一个react事例

    综上所述,"react-旨在重构一个react事例"的项目涵盖了React组件化开发、Flux架构的应用以及代码重构的实践。通过对这个项目的学习,你可以深入理解React和状态管理,并了解如何通过重构提升代码质量和应用程序的...

    重构----改善既有代码的设计(完整中文扫描版PDF)

    Martin Fowler是该领域的知名技术专家,他将自己在重构方面的实践经验融入书中,展示了如何将一个糟糕的设计通过一系列小而安全的步骤转变为一个优秀的设计。他在书中详细说明了重构的机会通常可以在哪里找到,以及...

    重构中的源码,可能对照重构的书籍进行阅读

    1. **提取方法**:当一个方法变得过长或者承担太多职责时,可以将其分解为多个小方法,每个小方法只负责单一任务。 2. **移动函数/变量**:如果一个函数或变量在不同类之间被频繁调用,可能需要考虑将其移到更合适...

    c#窗体重构 窗体重构教程

    在C#编程中,窗体重构是一个常见的任务,它涉及到改变窗体的外观和行为以满足特定需求。本文主要探讨如何实现自定义窗体的皮肤重构,通过图文并茂的方式和真实例子帮助开发者掌握这一技能。 首先,我们需要设计一套...

    重构 _改善既有代码的设计(中文版) pdf

    在软件开发领域中,重构是一个重要的技术,它可以帮助开发人员提升代码的可读性、可维护性和性能,同时还能降低软件未来的扩展成本。 重构的关键在于对已有代码结构的改进,而不是改变代码的功能。这种做法对于维护...

    重构 改善既有代码的设计 pdf 中文

    首先,重构应该是一个持续的过程,而不是一次性的大工程。其次,应该保持频繁的测试,确保代码重构不会引入新的错误。重构还应该采取小步快跑的方式,每次只进行少量改动,并且频繁地进行代码审查和测试,从而确保...

    三电阻电流重构说明书

    每个电阻对应一个电流测量通道,通过这三个通道,我们可以获取到系统中的零序、正序和负序电流分量。这些电流分量是电力系统分析中的关键参数,对于故障识别、负载平衡和电能质量评估等具有重要意义。 在MATLAB环境...

    java代码重构经验分享

    以下是一个处理 Java 异常的例子: ```java try { // ⑸ Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery( "select uid, name from user"); while (rs.next()) { out.println(...

    java重构设计.doc

    本文将深入探讨重构的几个核心方面,包括重构的要求、工作流程、识别代码问题的标志以及具体的重构例子。 ### 1. 重构要求 重构的首要要求是保持原有的功能不变。这意味着在进行重构时,不能引入新的bug或改变原有...

    xiaobolizi2.rar_dwt2例子_matalb_小波分解重构

    在本案例中,"xiaobolizi2.rar"是一个压缩包,包含了一个使用MATLAB(Matrix Laboratory)进行小波分解和重构的示例,名为“dwt2例子”。MATLAB是一个强大的编程环境,尤其适合于数值计算和数据分析,它提供了丰富的...

    数据库重构下部(PDF)

    书中通过许多实际例子,详细说明了数据库重构的过程、策略以及部署。. 本书前5章介绍了演进式数据库开发的基本思想和技术,后6章详细描述了每一类重构,包括结构、数据质量、参照完整性、架构、方法的重构;另外还...

Global site tag (gtag.js) - Google Analytics