圣诞大减价开始了!

下推法

问题

行为是否在只被一个(或几个)子类使用的超类中实现?

解决方案

将此行为移到子类中。

之前
下推法-前推
下推法-之后

为什么重构

起初,某一种方法对所有类都是通用的,但实际上只在一个子类中使用。当计划的特性未能实现时,就会出现这种情况。

这种情况也可能发生在从类层次结构中部分提取(或删除)功能之后,只留下一个方法在一个子类中使用。

如果您看到一个方法被多个子类所需要,但不是全部,那么创建一个中间子类并将该方法移到其中可能会很有用。这可以避免将一个方法下推到所有子类所导致的代码重复。

好处

  • 提高职业连贯性。方法位于您希望看到它的地方。

如何重构

  1. 在子类中声明方法,并从父类复制其代码。

  2. 从超类中移除该方法。

  3. 找到所有使用该方法的地方,并验证它是从必要的子类调用的。

Baidu
map