2

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

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

有没有人有任何设计建议?(我对 OO 设计比较陌生)

4

1 回答 1

5

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

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>();
于 2012-12-10T14:59:33.700 回答