我意识到将不同类型的对象放入一个集合中通常是一个坏主意,并且我可以通过将类型设置为“对象”来做到这一点,但我遇到了一种情况,我无法想到替代方案,并希望其他人可以。
情况: 在游戏回合结束时,我希望玩家能够有效地从牌堆中拿起一张牌。该卡将是三种类型的卡之一。通常这张牌会进入玩家的手上并允许玩家执行标准 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/