重构读书笔记-11_8_Extract_Interface

重构第十一章 8.Extract Interface(提炼接口)
若干客户使用class接口中的同一子集;或者,两个classes的接口有部分相同。将相同的子集提炼到一个独立接口中。
【重构读书笔记-11_8_Extract_Interface】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。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!

    推荐阅读