重构第十一章
8.Extract Interface(提炼接口)
若干客户使用class接口中的同一子集;或者,两个classes的接口有部分相同。将相同的子集提炼到一个独立接口中。
Example:
double charge(Employee emp, int days) {
int base = emp.getRate() * days;
if(emp.hasSpecialSkill())
return base * 1.05;
else return base;
}
End:
interface Billable {
public int getRate();
public boolean hasSpecialSkill();
}
class Employee implements Billable...
double charge(Billable emp, int days) {
int base = emp.getRate() * days;
if(emp.hasSpecialSkill())
return base * 1.05;
else return base;
}
Conclusion:
Extract Superclass(提炼超类)和Extract Interface(提炼接口)有很多的共通之处;Extract Superclass(提炼超类)提炼了classes中的重复代码;Extract Interface(提炼接口)只是提炼了classes中的接口,重复代码没有被消除,这个时候可以使用Extract Class(提炼类)的方法来将共同行为提炼出去,然后通过接口提供给其他客户使用。
Extract Superclass(提炼超类)比较简单,不过每个class只能有一个超类,但可以有多个interface。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
网友评论