键入层次结构+可选字段

时间:2013-07-05 04:08:46

标签: java design-patterns inheritance polymorphism

我正在研究一些Java,而且我不太确定如何解决这个问题,至少在没有我想避免的丑陋的情况下。我有一个父抽象类,让我们说Item。 Item有三个子类,ItemA,它是具体的,另一个是抽象类,ItemB,它本身有两个具体的子类,ItemB1和ItemB2。 ItemA只是一个存根,如果Item本身可以变得具体,则可能不需要存在,但我不确定存根是否需要,具体取决于解决方案。所有这些必须继承自Item或父接口,因为它们将位于多个集合中。

现在,我们有了这个Items的层次结构。有趣的是,Items有一个可选的对象字段,让我们说它是一个名为Functionality的对象。任何具体类都可能具有Functionality对象,但有些不会。它需要在某些方面,但在其他方面不应该存在。我想避免在Item中拍打它并且一直无效检查它是否存在。它有可能,但让我觉得有点难看。我不认为将层次结构分成两个单独的树是非常可行的,因为我主要是用一条额外数据复制一堆类。

在这样的情况下该怎么办?我最初以为使用装饰的,但是这意味着类型检查像疯了一样,看它是否是一个FunctionalityDecoratedItem或诸如此类每次我需要查看其是否具有功能性领域的时间,I' M已经做了一些类型检查的来确定如何处理Item的不同子类型。也许我只是在挑剔这个(我有时会倾向于挂在小细节上)或者可能有一个明显的解决方案,我的鼻子阻塞,但我希望我&# 39;我们错过了一种可以干净利落地实现这一目标的模式或技术。

1 个答案:

答案 0 :(得分:2)

定义界面。有些类实现了接口,有些则没有。您可以使用instanceof检查对象是否在运行时实现接口。