圣诞大减价开始了!

用字段替换子类

问题

子类只在它们的(常量返回)方法上有所不同。

解决方案

用父类中的字段替换方法,并删除子类。

之前
将Subclass替换为Fields - Before
用字段替换子类-之后

为什么重构

有时重构只是避免类型代码的方法。

在这种情况下,子类的层次结构可能只在特定方法返回的值上有所不同。这些方法甚至不是计算的结果,而是在方法本身或方法返回的字段中严格设置的。为了简化类体系结构,可以根据情况将这个层次结构压缩为一个类,其中包含一个或多个具有必要值的字段。

在将大量功能从一个类层次结构移到另一个地方之后,这些更改可能是必要的。当前的层次结构不再那么有价值,它的子类现在只是累赘。

好处

  • 简化系统架构。如果您只想在不同的方法中返回不同的值,那么创建子类是多余的。

如何重构

  1. 应用用工厂方法替换构造函数到子类。

  2. 用超类工厂方法调用替换子类构造函数调用。

  3. 在父类中,声明用于存储每个返回常量值的子类方法的值的字段。

  4. 创建一个受保护的超类构造函数,用于初始化新字段。

  5. 创建或修改现有的子类构造函数,以便它们调用父类的新构造函数并将相关值传递给它。

  6. 在父类中实现每个常量方法,以便它返回相应字段的值。然后从子类中删除该方法。

  7. 如果子类构造函数具有附加功能,则使用内联方法将构造函数合并到超类工厂方法中。

  8. 删除子类。

Baidu
map