gpt4 book ai didi

java - 在这种情况下我应该使用继承还是组合?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:05 25 4
gpt4 key购买 nike

我正在编写一个简单的游戏,许多游戏对象共享属性。我有两个可能的实现方式。

第一种是使用继承,如下图所示:

Class Hierarchy

如您所料,粗体类是抽象类。分支是实际使用的派生类。请务必注意,这些类保存有关对象的数据,没有与它们关联的功能。

例如,Troop 和 Vehicle 有一个共同的接口(interface),它们都使用该接口(interface)来执行 attack() 和 move() 等操作。上面概述的类层次结构只是原始统计数据。此外,它们都是真正的 ISA 关系。

第二个实现使用组合。与上面的类层次结构不同,每个抽象类都是包含某些数据成员的“模块”。所以 SpecialAbility 有一个名为 PointsValueObject 的数据成员(尽管我更改了抽象类的名称(虽然它们不再是抽象的)以反射(reflect)它们的模块化/属性性质)。 Troop 具有数据成员:PointsValueObject、PhysicalObject、PhysicalAttackObject 和 BattleOBject,它们中的每一个都是包含关于部队的数据的模块。同样,这些模块中不存在任何功能,它们仅用于存储数据。行为和功能仍然通过接口(interface)类实现。

我的问题是:人们通常更喜欢组合而不是继承,但在这种情况下,我倾向于坚持继承,因为 ISA 关系成立并且层次结构不包含行为,只包含数据。这个层次结构是好的 OOD 还是使用属性“模块”更好地构建类?

最佳答案

如果没有代码被重用,您认为使用继承有什么优势?当行为相同时,继承对 DRY(不要重复自己)很有用,但如果没有行为,你所做的一切都可能会限制你自己——如果你后来决定你有一个需要较少数据的子层次结构,那么就没有好的解决方案因为这样做。

关于java - 在这种情况下我应该使用继承还是组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com