【发布时间】:2012-01-30 19:17:08
【问题描述】:
我正在设计一款游戏,但我无法完全理解继承结构。我通常很擅长,但是这个重叠太多了,我无法全部决定。
我正在寻找帆船模型 - 想想航海时代。因此,大概所有东西都扩展了 Vessel 类。
然后有几种类型的船只类型:划船(厨房、独木舟)、方形钻机、前后钻机,具有不同的行为。这些中的每一个都进一步细分为其他几种类型。我无法决定这是否应该是 Vessel 的一系列接口或扩展。另请注意,可能会有一些交叉(船既可以是划船的也可以是方形的)这让我想到了接口?
船舶也有不同的行为:商船、战士、私掠者、海盗。我真的不知道这应该是一个接口还是另一个类的扩展。但是,在这种情况下没有类型交叉。
最后,个别船只可以有几种行为。商人可能在车队中(自卫)或独立(逃跑)。战士几乎总是攻击,除非严重超过……但可以在舰队、中队或独立工作。私掠者和海盗只有在较弱的情况下才会攻击——通常是独立的,但偶尔会成对攻击。我假设这也应该是一个接口?
我最大的问题是每种类型的舰船(护卫舰、战列舰等)几乎都可以胜任这些角色,所以我无法构建一个简单可靠的继承结构。护卫舰不能扩展人机大战,因为有些是私掠船。 Sloop 不能扩展方形索具,因为有些是前后索具的。等等。
任何想法都将不胜感激,我有点不知所措。 谢谢
【问题讨论】:
-
我脑海中浮现的两个想法是“基于组件的设计”和“策略模式”。至于每艘船可以拥有的不同行为,这对我来说绝对是一种策略模式——每艘船都在使用多种不同策略中的一种。在维基百科上查看:en.wikipedia.org/wiki/Strategy_pattern
-
一艘船可能在运行时从商船变成海盗船,因此接口不适用于这种动态行为。
-
@amadeus:没明白你的意思。如果您是“为接口编程”,您可以准确地做到这一点。
-
@amadeus - 船只不会动态地从商人变成海盗,更重要的是,每种船只在创建时都可以是其中一种。
-
啊,太棒了 - 谢谢 - 我现在明白了 :)
标签: java oop design-patterns architecture