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

时间:2012-12-10 14:52:24

标签: java oop

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

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

有没有人有任何设计建议? (我对OO设计很新)

1 个答案:

答案 0 :(得分:4)

您使用界面的想法是正确的。但是,您不需要使“特殊操作卡”实现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>();