1. Rename Method(函数改名)
-
做法
- 检查函数签名是否被超类或者子类实现过。如果是,则需要针对每份实现分别进行下列步骤
- 声明一个新函数,将它命名为你想要的新名称。将旧函数的代码复制到新函数中,并进行适当调整
- 编译
- 修改旧函数,令他将调用转发给新函数
- 编译,测试
- 修改所有引用点
- 删除旧函数
- 编译,测试
2、Add Parameter(添加参数)
- 为此函数添加一个对象参数,让该对象带劲函数所需信息
- 如果旧函数是public接口的一部分,你可能无法安全的删除它。这种情况下,请将它保留在原地,并将它标记为deprecated(建议不使用)
3、Remove Parameter(移除参数)
- 函数体不需要某个参数,将该参数去除
- 对于多态函数,可能多态函数的另一份实现中用到了这个参数,此时不能去除他。
4、Separate Query from Modifier(将查询函数和修改函数分离)
- 某个函数机返回对象状态值,又修改对象状态
- 建立两个不同的函数,其中一个负责查询,另一个负责修改
5、Parameterize Method(令函数携带参数)
- 相似的函数,仅仅因为几个参数的导致略有不同,则提取函数,减少重复代码
- 可将少量数值视为参数,找出带有重复性的代码
6、Replace Parameter with Explicit Methods(以明确函数取代参数)
- 如果某个参数有多种可能的值,而函数内又一条件表达式检查这些参数值,并根据不同参数值做出不同的行为,就应该使用此重构
- 针对参数的每一种可能值,新建一个明确函数
7、Preserve Whole Object(保持对象完整)
8、Replace Parameter with Methods(以函数取代参数)
- 让参数接受者去除该项参数,并直接调用前一个函数
- 如果函数可以通过其他途径获得参数值,那么他就不应该通过参数取得该值
9、Introduce Parameter Object(引入参数对象)
- 某些参数(一组参数)总是很自然的同时出现,以一个对象取代这些参数
- 特定的一组参数总是一起被传递,可能隶属于同一个类,也可能隶属不同的类,这样一组参数就是所谓的数据泥团
- 新建一个类,用以表现你想替换的一组参数。将这个类的字段设为不可变的
10、Remove Setting Method(移除设值函数)
- 类中的某个字段应该在对象创建时被设值,然后就不再改变,去掉该字段的所有设值函数
11、Hide Method(隐藏函数)
- 有一个函数,从来没有被其他任何类用到,将这个函数修改为private
12、Replace Constructor with Factory Method(以工厂函数取代构造函数)
- 将构造函数替换为工厂函数
13、Encapsulate Downcast(封装向下转型)
- 某个函数返回的对象,需要由函数调用者执行向下转型
14、Replace Error Code with Exception(以异常取代错误码)
15、Replace Exception with Test(以测试取代异常)
try{
String a = list.get(0);
} catch (Execption e) {
throw new RuntimeException("xxx");
}
可以理解为获取list的数据时,可能会出现空指针异常, 这个时候可以先对list进行判断,如下
if(Collections.isEmpty(list)) {
return "";
}
String a = list.get(0);
这样就可以去掉try.catch块,达到已测试取代异常的效果