1、分解并重组长函数
(1)代码块越小,代码功能就越容易管理
(2)重构之前先检查是否有一套可靠的测试机制
(3)做了修改就要编译并测试,保证自己没有破坏任何东西
2、更改变量名称
(1)代码应该表现自己的目的
3、移动函数
(1)一般函数应该放在它所用的数据的所属对象内
(2)有时保留旧函数,调用新函数,如果旧函数是public,不必修改其他接口
4、尽量去除临时变量
(1)临时变量会导致大量的参数被传来传去,容易跟丢
5、运用多态取代条件逻辑
(1)最好不要在另一个对象的属性基础上运用switch语句,不得不用也应在对象自己数据上用
(2)引入state模式,添加间接层,继承接口,去掉switch
public class Employee {
private int mType;
static final int salary=500;
static final int commission=500;
static final int bonus=1000;
static final int ENGINEER=0;
static final int SALESMAN=1;
static final int MANAGER=2;
public Employee(int type) {
this.mType=type;
}
int payAmout(){
switch (mType) {
case ENGINEER:
return salary;
case SALESMAN:
return salary+commission;
case MANAGER:
return salary+bonus;
default:
throw new RuntimeException();
}
}
}
--------------------- --------------------- --------------------- --------------------- ---------------------
// 运用多态进行重构
public class Employee {
static final int salary=500;
static final int commission=500;
static final int bonus=1000;
EmployeeType mEmployeeType;
public void setType(EmployeeType employeeType){
this.mEmployeeType=employeeType;
}
int payAmout(){
return mEmployeeType.payAmout();
}
}
public abstract class EmployeeType {
abstract int payAmout();
}
public class Engineer extends EmployeeType{
int payAmout() {
return Employee.salary;
}
}
public class Manager extends EmployeeType{
int payAmout() {
return Employee.salary+Employee.bonus;
}
}
public class Salesman extends EmployeeType{
int payAmout() {
return Employee.salary+Employee.commission;
}
}
---------------------
上述案例来源:CSDN 原文:https://blog.csdn.net/laojiaqi/article/details/47757993
尾注
- 上述的总结与思考是基于对《重构—改善既有代码的设计》这本书的精读与演绎
- 更多及时干货,请关注微信公众号:JAVA万维猿圈