让我们说我有一个简单的游戏,其中玩家可以选择对象X.人类显然可以通过gui和计算机通过一些策略来做。他们都共享相同的模型类,播放器:
public class Player {
private String name;
private X x;
public Player(name, x) {
...
}
}
注意没有setter,这意味着每次他们做出选择时我都要创建一个Player的新对象,其名称相同但X不同。
现在,这个策略是一个界面,
public interface PlayerXChoiceStrategy {
public X getPlayersChoice();
}
并且有两个实现此目的的类,HumanXChoiceStrategy
和SomeBotXChoiceStrategy
。我不想在模型中使用这些策略而我不想使用Map<Player, PlayerXChoiceStrategy>
这样的东西,因为Player是不可变的,因此会产生一些问题。我怎样才能以快速的方式检索策略而不依赖于模型/地图?我显然使用这些策略,比如说一个Controller类,我调用每个玩家getPlayersChoice()
。
我唯一的想法是拥有Map<String name, PlayerXChoiceStrategy>
,我可能会实施,除非有人提出更好的答案。
答案 0 :(得分:1)
嗯,这是最深的OOP,不是吗? ;)人类显然可以通过gui和计算机通过某种策略来实现它
我会使Player
类成为一个带有getStrategy
抽象方法的基类,并从中下降两个类:HumanPlayer
和ComputerPlayer
return new XXXStrategy()
不同的实现它