我有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:
...
答案 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