《31天重构》3:提升方法

发布时间:2019-07-05 10:15:41编辑:auto阅读(1483)

    在一个继承族中,如果一个子类中的某个独有方法同样被另一个子类需要,那么这个方法就应该提升到父类中去,作为子类公有、可访问的方法。代码如下:

    1. abstract class Vehicle {  
    2.     // some methods  
    3. }  
    4.  
    5. class Car extends Vehicle {  
    6.     public void turn(int direction) {  
    7.         // code  
    8.     }  
    9. }  
    10.  
    11. class Motocyble extends Vehicle{  
    12.     // some methods  
    13. }  
    14.  
    15. //全局变量  
    16. interface Directions {  
    17.     public static final int LEFT = 1;  
    18.     public static final int RIGHT = 2;  

    重构之后: 

     

    1. abstract class Vehicle {  
    2.     public abstract void turn(int direction);  
    3. }  
    4.  
    5. class Car extends Vehicle {  
    6.     @Override 
    7.     public void turn(int direction) {  
    8.         // code  
    9.     }  
    10. }  
    11.  
    12. class Motocyble extends Vehicle{  
    13.     @Override 
    14.     public void turn(int direction) {  
    15.         // code  
    16.     }  
    17. }  
    18.  
    19. //全局变量  
    20. interface Directions {  
    21.     public static final int LEFT = 1;  
    22.     public static final int RIGHT = 2;  

    其实,提升子类方法作为父类方法,以使所有子类都可见、可覆盖的重构方法,就是使用了继承机制,使得父类方法称为一种类似于“基因”的形式“遗传”给各自类,只不过这种“基因”如果不是抽象象方法,那么具体子类可以自主性地选择性是否要继承。尽管是抽象方法,子类也可以对继承而来的父类抽象方法进行空实现。

    同样的道理,什么时候提升方法作为父类方法也应依据具体情况而定,设计模式中好多种模式都有运用到了提升方法的方式,模板方法模式(Template Method)就是很常见的一个了。

    原文请参考以下链接:

    http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/03/refactoring-day-3-pull-up-method.aspx

关键字