java - 一个集合中不同类型对象的其他选项

标签 java oop

我意识到将不同类型的对象放入一个集合中通常是一个坏主意,并且我可以通过将类型设置为“对象”来做到这一点,但我遇到了一种情况,我无法想到替代方案,并希望其他人可以。

情况: 在游戏回合结束时,我希望玩家能够有效地从牌堆中拿起一张牌。该卡将是三种类型的卡之一。通常这张牌会进入玩家的手上并允许玩家执行标准 Action ,但我希望玩家有机会获得一张特殊的牌,其 Action 特定于该牌,并且有机会玩家获得一张牌,该牌会立即采取行动,而不是进入玩家手中。这些类型的卡牌没有任何共同点,因此拥有共同的界面似乎没有意义,但我希望它们在牌组中随机混合,所以我希望将它们全部放在一个集合中。

有人有什么设计建议吗? (我对 OO 设计相当陌生)

最佳答案

您使用界面的想法是正确的。但是,您不需要使“特殊操作卡”实现 Card 接口(interface):为其创建一个不同的接口(interface)(例如 Deckable),使 >Card 接口(interface)继承它,然后在你的“特殊 Action 卡”类中实现该接口(interface)。

interface Deckable {
    void takeAction();
}
interface Card extends Deckable {
    int getRank();
    int getSuit();
}
class PlayingCard implements Card {
    ...
}
class SpecialActionCard implements Deckable {
    ...
}

现在您可以创建一个 Deckable 列表,并将您的特殊卡片混合到其中:

List<Deckable> deck = new ArrayList<Deckable>();

关于java - 一个集合中不同类型对象的其他选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13803325/

相关文章:

java - 从主类 jdeveloper 加载表单

c# - 既然我们已经有了它的超集抽象类,还需要引入什么接口(interface)呢?

java - 重用对象的最佳方式

PHP: 'method doesnt exist' ,但确实如此

C++ 两个类相互转换并调用它们的函数

java - 比较非英文字符

java - 如何在 Android 中使用 runnable 循环

java - Java中需要什么Void类

java - char[] 的大小是多少?

c++ - 哎呀沮丧