OOP设计 - 如何避免对象类型检查

时间:2014-08-15 16:42:17

标签: oop polymorphism

我有2个类,Game和Player,它们都是各种类型的游戏和玩家的子类,例如PracticeGame,DifficultGame,ExpertPlayer和NewbiePlayer。

游戏的行为因玩家的类型而异,反之亦然。例如,在困难游戏中,规则更加严格,而NewbiePlayers则会减少一些休息时间,并给予一些额外的帮助。

有没有办法避免在Player类中检查游戏类型并检查Game类中的Player类型?我不认为我可以使用简单的多态,因为这两个类都没有单方面拥有这种行为;行为取决于他们两个。

这是一个显示问题的示例。我有if-else语句检查两个对象的类型:

class Game:

    do_something:
        for each player:
            if player is NewbiePlayer:
                ...
            else if player is ExpertPlayer:
                ...
            else:
                ...

class Player:

    change_something:
        if game is DifficultGame:
            ...
        else:
            ...

1 个答案:

答案 0 :(得分:1)

除非你暗示这是不可能的,否则我会实现简单的抽象方法并在子类中定义它们:

class Game:

    do_something:
        for each player:
            player.onDo(this);

    abstract onChange(Player player);


class Player:

    change_something:
        game.onChange(player);

    abstract onDo(Game game);



class DifficultGame:

    onChange(Player player):
        // DifficultGame specific code


class NewbiePlayer:

    onDo(Game game):
        // NewbiePlayer specific code


class ExpertPlayer:

    onDo(Game game):
        // ExpertPlayer specific code