【问题标题】:Type hierarchy + optional field类型层次结构 + 可选字段
【发布时间】:2013-07-05 04:08:46
【问题描述】:

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

现在,我们有了这个项目的层次结构。有趣的是,Items 有一个可选的对象字段,假设它是一个名为 Functionality 的对象。任何具体类都可能具有功能对象,但有些则不会。它需要存在于某些人身上,但不应该存在于其他人身上。我想避免在 Item 中拍打它并一直检查它是否存在。这是可能的,但让我觉得有点难看。我也不认为将层次结构拆分为两个单独的树真的可行,因为我主要是用一个额外的数据复制一堆类。

遇到这种情况该怎么办?我最初考虑使用装饰器,但这意味着每次我需要查看它是否具有功能字段时都会疯狂地进行类型检查以查看它是否是 FunctionalityDecoratedItem 或类似的东西,并且我已经在进行一些类型检查以确定什么与不同的项目子类型有关。也许我只是在吹毛求疵(我有时倾向于在小细节上挂断)或者我的鼻子阻塞的明显解决方案,但我希望我只是错过了一个模式或技术可以干净地实现这一点。

【问题讨论】:

    标签: java design-patterns inheritance polymorphism


    【解决方案1】:

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

    【讨论】:

    • 我可能应该提一下,它们都需要实现一个通用接口,因为将在多个场合使用接口的集合。声明一个接口并将其分成两组,一组具有功能,另一组不具有另一对接口,这将导致大量重复并使可维护性更加困难。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2013-03-20
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多