我正在用打字稿做一个小型足球比赛,希望允许用户一次控制一个球员,但他们可以切换以控制另一个球员。我有一个包含属性的播放器类和一个getNextMove方法,无论该播放器是由用户还是由AI控制,都将需要该方法。但是,我希望getNextMove方法实现不同的逻辑,具体取决于播放器是由用户还是由AI控制。
我正在考虑实现一个User类和一个AI类,这些类实现Player类并随后实现getNextMove方法。
这符合我的想法
interface Player {
...
getNextMove()
}
class User implements Player{
getNextMove(){
// Take user input
}
}
class AI implements Player{
getNextMove(){
// Decide next move automatically
}
}
但是,随着用户更换玩家,他们刚刚控制的玩家将需要切换回使用AI逻辑。我不认为可以动态地切换类,也不能认为不在Object结构之外,也找不到可以实现我想要的东西的东西。任何建议都非常感谢。
答案 0 :(得分:1)
我同意JB Nizet。
使用strategy模式。
class UserState {
// properties
}
class User {
constructor(){
this.state = new UserState();
}
activateUserControl(){
this.moveStrategy = new UserControlStrategy(this.state);
}
activateAI(){
this.moveStrategy = new AIControlStrategy(this.state);
}
getNextMove(){
this.moveStrategy.nextMove();
}
}