【发布时间】:2020-04-11 10:22:27
【问题描述】:
继承链是否应该避免?
我目前正在重构一个 java 项目,我遇到了许多类 (8),它们都具有共享功能。因此,使用 Extract Super Class 重构,我创建了一个具有该功能的超类并将其传递给所有子类。现在,其中 2 个类还具有第二个共享功能。我应该创建另一个从第一个超类继承的超类,然后由子类扩展还是简单地在 2 个子类上扩展多个类?
想法
尽管这两个选项都会起作用,但我觉得进行多个扩展是更可取的,因为它描述并阐明了类的职责。此外,我们将避免为了到达顶级超类而进行连续的 super() 调用。
另一方面,也许有一个继承链有点整理这个地方。
编辑:我明白我完全错误地陈述了我的问题。上面提到的 8 个类都遵循命令模式,因此每个类都有不同的目的和功能。我已经提取了一个超类以避免它们的构造函数中的代码重复。其中两个类也有更多的重复代码(不重复功能,因为它们做同样的事情)。不幸的是,由于项目的性质,我没有编写原始代码以及时间紧迫的事实并没有让我完全重构整个项目。可以说,它现在无法修复。但我能做的就是拼凑起来,尝试删除重复的代码并稍微整理一下。
【问题讨论】:
-
如果没有具体的例子,很难给出建议。与您给出的两个选项中的任何一个相比,组合很可能是一个更好的模式。认真思考你是否在处理“有”而不是“是”的关系。如果您可以举一个具体的例子,那么有人将能够明确回答哪种模式(组合、链接和多个扩展)最适合您的情况。
-
编辑了我的问题,以便可能提供一些澄清。
-
听起来这里没有“是”的关系,你可能应该尝试组合。但同样,如果没有看到您的代码,很难明确回答。
标签: java inheritance design-patterns refactoring