重构代码的坏味道:使用设计模式重构方法
需积分: 1 132 浏览量
更新于2024-09-09
收藏 44KB DOC 举报
重构和模式
重构和模式是软件开发过程中不可或缺的一部分。重构是指对现有代码进行修改,使其变得更加简洁、易于维护和扩展。模式则是对常见问题的解决方案,提供了一种通用的解决方法。下面我们将对重构和模式进行详细说明。
**1. 代码的坏味道**
代码的坏味道是指代码中存在的问题或错误,例如重复代码、过长方法、过长参数列等。这些问题会使代码变得难以维护和扩展。重构的目的是将代码的坏味道消除,使代码变得更加简洁和易于维护。
**重构方法**
重构方法是指对代码进行修改,使其变得更加简洁和易于维护的方法。常见的重构方法包括提炼方法、提取类、方法上移、引入NullObject等。
* 提炼方法:将一个长方法分解成多个小方法,每个方法都有其特定的功能。
* 提取类:将一个大类分解成多个小类,每个类都有其特定的功能。
* 方法上移:将一个方法移到其父类中,以便多个子类可以共享该方法。
* 引入NullObject:将null对象引入代码中,以便避免null pointer异常。
**使用模式重构**
模式是对常见问题的解决方案,提供了一种通用的解决方法。常见的模式包括TemplateMethod、Composite、FactoryMethod、Adapter等。
* TemplateMethod:定义一个算法的骨架,然后将一些步骤延迟到子类中。
* Composite:将对象组合成树形结构,以便客户端可以统一对待单个对象和组合对象。
* FactoryMethod:定义一个用于创建对象的接口,让子类决定实例化哪种类型的对象。
* Adapter:将一个类的接口转换成另一个类的接口,以便于两个类之间的协作。
**2. 过长方法**
过长方法是指一个方法中包含了太多的代码,难以维护和扩展。解决方法包括提取方法、组合方法、以查询取代临时变量等。
* 提取方法:将一个长方法分解成多个小方法,每个方法都有其特定的功能。
* 组合方法:将多个小方法组合成一个大方法,以便简化代码。
* 以查询取代临时变量:使用查询来取代临时变量,以便简化代码。
**3. 过长参数列**
过长参数列是指一个方法中的参数太多,难以维护和扩展。解决方法包括以方法取代参数、引入参数对象等。
* 以方法取代参数:将参数转换成方法,以便简化代码。
* 引入参数对象:将参数封装成一个对象,以便简化代码。
**4. 条件逻辑过度复杂**
条件逻辑过度复杂是指一个方法中的条件逻辑太多,难以维护和扩展。解决方法包括分解条件式、合并条件式、引入断言等。
* 分解条件式:将一个条件式分解成多个小条件式,以便简化代码。
* 合并条件式:将多个小条件式合并成一个大条件式,以便简化代码。
* 引入断言:使用断言来检查条件,以便简化代码。
**5. 分支语句**
分支语句是指一个方法中的分支语句太多,难以维护和扩展。解决方法包括提取方法、转移方法、以State/Strategy取代类型代码等。
* 提取方法:将一个长方法分解成多个小方法,每个方法都有其特定的功能。
* 转移方法:将一个方法移到其父类中,以便多个子类可以共享该方法。
* 以State/Strategy取代类型代码:使用状态机或策略模式来取代类型代码,以便简化代码。
**6. 基本类型迷恋**
基本类型迷恋是指程序代码过于依赖基本类型,例如int、string、double、array等。解决方法包括以对象取代数据值、以类型取代类型代码等。
* 以对象取代数据值:使用对象来取代基本类型,以便简化代码。
* 以类型取代类型代码:使用类型来取代基本类型,以便简化代码。
**7. 数据泥团**
数据泥团是指类的字段和参数列中总是一起出现的数据。解决方法包括提取类、引入参数对象等。
* 提取类:将一个大类分解成多个小类,每个类都有其特定的功能。
* 引入参数对象:将参数封装成一个对象,以便简化代码。
**8. 令人迷惑的临时字段**
令人迷惑的临时字段是指类中的临时字段太多,难以维护和扩展。解决方法包括引入NullObject、提取类等。
* 引入NullObject:将null对象引入代码中,以便避免null pointer异常。
* 提取类:将一个大类分解成多个小类,每个类都有其特定的功能。
**9. 组合爆炸**
组合爆炸是指许多段代码使用不同种类或数量的数据或对象做同样的事情。解决方法包括以Interpreter取代隐式语言等。
* 以Interpreter取代隐式语言:使用解释器模式来取代隐式语言,以便简化代码。
2018-12-24 上传
2012-04-30 上传
2016-05-02 上传
2011-11-13 上传
161 浏览量
114 浏览量
2024-11-13 上传
tonghua2009
- 粉丝: 5
- 资源: 27
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载