下推法
问题
行为是否在只被一个(或几个)子类使用的超类中实现?
解决方案
将此行为移到子类中。
之前

后

为什么重构
起初,某一种方法对所有类都是通用的,但实际上只在一个子类中使用。当计划的特性未能实现时,就会出现这种情况。
这种情况也可能发生在从类层次结构中部分提取(或删除)功能之后,只留下一个方法在一个子类中使用。
如果您看到一个方法被多个子类所需要,但不是全部,那么创建一个中间子类并将该方法移到其中可能会很有用。这可以避免将一个方法下推到所有子类所导致的代码重复。
好处
- 提高职业连贯性。方法位于您希望看到它的地方。
如何重构
在子类中声明方法,并从父类复制其代码。
从超类中移除该方法。
找到所有使用该方法的地方,并验证它是从必要的子类调用的。