重构读书笔记-11_8_Extract_Interface

重构第十一章

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。

注意

重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!

你可能感兴趣的:(重构读书笔记-11_8_Extract_Interface)