【发布时间】:2014-07-09 07:31:57
【问题描述】:
我有一个类BaseClass 和一个类Subclass,它派生自Baseclass 并覆盖了它的一些方法。
public class BaseClass{}
public class SubClass extends BaseClass{
//override some methods
}
还有另一个类SimpleBaseClass 派生自BaseClass 并覆盖BaseClass 的一些其他方法,因为它与SubClass 相比提供不同的功能
public class SimpleBaseClass extends BaseClass{
//override some other methods
}
在某些情况下,我想将SubClass 的功能和特性授予SimpleBaseClass。最好的做法是什么?在这种情况下是否有适用的模式?尽管可以创建一个新的SubSimpleBaseClass,它派生自SubClass,但复制SimpleBaseClass 的代码,这样就具有两个类的功能:SubClass 和SimpleBaseClass。
public class SubSimpleBaseClass extends SubClass{
//do what SimpleBaseClass does
}
但是通过这种方式代码在SubSimpleBaseClass 中重复。避免它的最佳方法是什么?也许Composition?在这种情况下,Decorator Pattern 会是一个合适的解决方案吗?
【问题讨论】:
-
是的,使用依赖注入的组合可能会有所帮助?
-
我认为你需要重新组织你的类层次结构。如果您需要在实施时做出非
beautiful架构/实施决定,那么您需要重新考虑您的架构。例如,做额外的继承步骤和额外的相互扩展的抽象类。 -
不谈模式,如果
SimpleBaseClass和SubClass之间有共同点,您可以为它们创建一个从BaseClass派生的共同祖先,并让其他人从中派生。 -
重构代码和重构模块的方法有很多。设计模式有助于找到具体要做什么。 composite 模式、decorator 模式、优先组合优于继承 思想等等,对于设计软件来说都是非常有价值的工具。 但是:重构的具体内容取决于您要实现的功能。或者更好:通过您要解决的问题。技术问题永远不应成为重构的动力。
-
@Davio:问题是 SimpleBaseClass 和 SubClass 没有共同实现的功能,它们覆盖了父级的不同方法。此外,最终目的是创建一个结合了它们的功能的派生类(无需重复代码)。
标签: java inheritance design-patterns composition