重构类关系-Push Down Method函数下移四
1.函数下移
1.1.使用场景
超类中的某个函数只与部分(而非全部)子类有关。将这个函数移到相关的那些子类去。
Push Down Method (328)与Pull Up Method (322)恰恰相反。当我有必要把某些行为从超类移至特定的子类时,我就使用Push Down Method (328),它通常也只在这种时候有用。使用Extract Subclass (330)之后你可能会需要它。
1.2.如何做
- 在所有子类中声明该函数,将超类中的函数本体复制到每一个子类函数中。
- 你可能需要将超类的某些字段声明为protected,让子类函数也能够访问它们。如果日后你也想把这些字段下移到子类,通常就可以那么做;否则应该使用超类提供的访问函数。如果访问函数并非public,你得将它声明为protected。
- 删除超类中的函数。
- 你可能必须修改调用端的某些变量声明或参数声明,以便能够使用子类。
- 如果有必要通过一个超类对象访问该函数,或你不想把该函数从任何子类中移除,再或超类是抽象类,那么你就可以在超类中
- 该函数声明为抽象函数。
- 编译,测试。
- 将该函数从所有不需要它的那些子类中删掉。
- 编译,测试。
1.3.示例
Employee 父类中的getQuota()
方法只在某个子类中单独使用,因此将它下移到子类中。