用字段替换子类
问题
子类只在它们的(常量返回)方法上有所不同。
解决方案
用父类中的字段替换方法,并删除子类。
之前

后

为什么重构
有时重构只是避免类型代码的方法。
在这种情况下,子类的层次结构可能只在特定方法返回的值上有所不同。这些方法甚至不是计算的结果,而是在方法本身或方法返回的字段中严格设置的。为了简化类体系结构,可以根据情况将这个层次结构压缩为一个类,其中包含一个或多个具有必要值的字段。
在将大量功能从一个类层次结构移到另一个地方之后,这些更改可能是必要的。当前的层次结构不再那么有价值,它的子类现在只是累赘。
好处
- 简化系统架构。如果您只想在不同的方法中返回不同的值,那么创建子类是多余的。
如何重构
应用用工厂方法替换构造函数到子类。
用超类工厂方法调用替换子类构造函数调用。
在父类中,声明用于存储每个返回常量值的子类方法的值的字段。
创建一个受保护的超类构造函数,用于初始化新字段。
创建或修改现有的子类构造函数,以便它们调用父类的新构造函数并将相关值传递给它。
在父类中实现每个常量方法,以便它返回相应字段的值。然后从子类中删除该方法。
如果子类构造函数具有附加功能,则使用内联方法将构造函数合并到超类工厂方法中。
删除子类。