【发布时间】:2014-07-12 04:10:53
【问题描述】:
我正在研究卡牌游戏 UNO 的实现(主要是运行模拟以测试一些房屋规则,但那是另一回事)。
对于那些从未玩过它的人来说,它类似于 Crazy Eights。玩家轮流在弃牌堆上打一张牌。卡片必须在数量或颜色上匹配。还有抽牌,迫使下一个玩家抽两张或四张牌。它对家规也很友好,这让它很有趣。
我有一个带有value 和color 卡的Card 类。我想做的是创建扩展Card 的DrawCard。然后,在确定游戏机制时,我会使用instanceof 来测试我是否有DrawCard。
我知道instanceof 经常有问题,但这对我来说似乎没问题。通常卡片的处理方式相同,只有少数特殊卡片会受到不同的处理,并且仅在特定于卡片类型的特殊情况下(虽然这似乎是一个滑坡的事情......)
我可以只在Card 类中使用标记(实际上,每种类型的卡都已经有自己的“值”),但无论如何我都在扩展Card,以便拥有其他类型的卡可以使用的一些方法有(这不仅仅是一种识别手段)。使用instanceof 对我来说似乎更通用,因为我不需要知道value 的哪些值需要这种特殊行为,例如,将 Draw 8 卡添加到绘制 2 和绘制 4。(这么说让我想知道是否可以使用某种嵌套枚举或其他东西,但我不知道)
我知道这两种解决方案都可以工作(让程序运行)。对我来说使用instanceof 感觉更好,但我没有经验来理解它是否可以。这是糟糕的设计吗?
【问题讨论】:
-
你觉得这篇文章的答案很有帮助:[在 Java 中使用 instanceof 的性能影响][1] [1]:stackoverflow.com/questions/103564/…
-
“抽奖”卡(不是类)是否也有值和颜色?如果不是,那么继承不是这里的正确解决方案——继承是一种“是”关系。请注意,如果“抽牌”卡确实具有值或颜色,则它们必须具有完全相同的语义才能被考虑。
-
@acdcjunior 是的,抽牌有颜色
标签: java oop instanceof