【问题标题】:How can I create a new class variable in 100+ existing classes?如何在 100 多个现有类中创建新的类变量?
【发布时间】:2021-05-25 05:20:06
【问题描述】:

我正在构建一个 Java 程序,该程序通过单独检查每个部件来检查汽车是否有先前的损坏。每个部分都分为自己的类。

选择汽车零件类别的 UML 图:

我的问题是每个部分都已经存在并且需要一个名为“损坏”的布尔值。有没有一种更快的方法来为每个类分配一个伤害变量而不是一个一个地做?

【问题讨论】:

  • 所有汽车零件都是CarPart 类的子类吗?如果不是,他们应该是。这样,您只需将布尔实例变量添加到顶级类,所有子类都将继承它。良好的设计实践几乎总能帮助您避免重复输入 100 次相同的内容。
  • 我只是在输入一个类似的答案。如果您没有 CarPart 超级类,您仍然需要修改每个类。但既然你无论如何都要这样做,那么在这种情况下你真的应该使用继承。
  • 谢谢查理!不,他们不是。好主意啊。谢谢!
  • 谢谢格雷格!我很感激反馈!很有帮助

标签: java oop variables inheritance design-patterns


【解决方案1】:

您能否创建一个带有布尔值isHealthyEnginePartHealth,然后您可以将其添加到需要它的每个部分?

如果可以的话,去组合而不是继承.. 似乎你已经在做。这将使您的设计更加灵活。使用带有健康指示器的父类也可以工作,但往往不太灵活......它可能仍然对你有用,并且需要更少的编码..你可能想要添加一些中间类作为任何的父类你想要保持引擎健康的部分......说如果你让Mirror成为CarPart的子类并且它自动继承健康,你最终可能会得到一堆父类来分组很多只会混淆的项目无法理解...在可能的情况下更倾向于组合而不是继承。

然后,您可以按照Healthiness 的方式创建一个接口,这将使您能够对实现该接口的所有类执行与健康相关的操作(您将其存储在应用程序的某个位置以便更轻松地测量健康-在列表/地图中,具体取决于您希望如何访问这些部分的健康状况)。

【讨论】:

    【解决方案2】:

    您可以使用方法isDamaged() 定义接口Inspectable。您的程序可以回复此Inspectable.isDamaged(),但不能回复实际的damage 属性。正如您提到的,有 100 多个类别,因此汽车零件可能有不同的形式。您可以将业务逻辑放在方法中并提供灵活性。对于布尔型变量,只有真假,变化不大。

    定义另一个类CarPart,它实现了Inspectable,并有一个私有的damage 属性。它为您的应用程序中所有汽车零件的超类提供服务。如果CarPart.isDamaged() 不适合某些子类需求,他们可以覆盖它并实现自己的isDamaged() 版本。

    【讨论】:

      【解决方案3】:

      虽然这两个选项 - 通用父类和接口实现在技术上都可以工作,但通用父级更适合您的情况。接口实现主要是定义通用行为,而在你的情况下你需要定义通用状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        • 2021-09-28
        • 1970-01-01
        • 2021-11-04
        • 2019-04-16
        相关资源
        最近更新 更多