1. 临时字段
定义
:某个实例变量仅为代码中一小部分功能临时所用而创建。
影响
:通常一个对象会需要它全部的变量。当一个变量看上去没什么用,却要试图理解它为什么在那里时,会使类的作用变得更难理解,影响了代码的可读和可维护性。
重构目标
:消除临时字段,提升代码可读性、可维护性。
重构方法
:
- 提炼类:封装这些变量和需要他们的方法为方法对象
- 引入特例:为变量无效时创建额外组件,消除条件代码
常见特点
:
- 某个实例变量仅为某种情况而设置
- 某些实例变量仅为某个函数的复杂算法少传参数而设置
重构中可能用到的快捷键操作
:
操作 | 快捷键 |
---|---|
提炼类 | Ctrl + Alt + Shift + T -> Extract Delegate 鼠标右键 -> refactor -> Extract Delegate |
抽提函数 | Ctrl + Alt + M |
内联 | Ctrl + Alt +N |
安全删除 | Alt + Del |
移除中间人 | Ctrl + Alt + Shift + T -> Remove Middleman 鼠标右键 -> refactor -> Remove Middleman |
2. 过长的消息链
定义
:用户向一个对象请求另一个对象,然后再向后者请求另一个对象,然后再请求一个对象…
在实际代码中可能是一长串取值函数或一长串临时变量。
影响
:客户端代码将与查找过程中的调用结构紧密耦合。一旦对象间的关系发生任何变化,客户端就不得不做出相应的修改。
重构目标
:使用隐藏委托关系,把调用链这种耦合关系放到中间人中。
重构方法
:
- 观察清楚消息链的调用业务逻辑
- 通过提炼函数把所有调用放在一个函数中
- 搬移函数到对应的中间人类中(新增或使用以前的类)
- 替换这个函数到之前的调用链。隐藏委托关系。
常见特点
:
- 外部调用内部对象的使用层级委托的消息链
- 调用消息链被外部依赖,对外暴露形成了耦合
- 本质上没有形成深模块的设计
重构中可能用到的快捷键操作
:
操作 | 快捷键 |
---|---|
抽取方法 | Ctrl + Alt + M |
移动函数 | F6 |
重命名 | Shift + F6 |
声明:本文仅用于学习交流。