Javascript 基于给定状态委派调用的模式
我在想一个我可以使用的模式 我希望能够有一个中间人模块,在一个游戏的一种状态采取。给定该状态,调用驻留在anotehr模块中的特定方法 我可以用什么样的图案 例如,我希望能够接受“计算机总是赢”的状态,并基于该状态类型,调用Javascript 基于给定状态委派调用的模式,javascript,node.js,design-patterns,Javascript,Node.js,Design Patterns,我在想一个我可以使用的模式 我希望能够有一个中间人模块,在一个游戏的一种状态采取。给定该状态,调用驻留在anotehr模块中的特定方法 我可以用什么样的图案 例如,我希望能够接受“计算机总是赢”的状态,并基于该状态类型,调用someOtherModule.makeComputerMove()。在未来,我们可能希望能够将游戏设置为一种电脑并不总是赢的模式。然后我们可以发送一个状态为“普通游戏”或类似的东西,从不同的用例模块调用computerAlwaysWins.makeComputerMove(
someOtherModule.makeComputerMove()
。在未来,我们可能希望能够将游戏设置为一种电脑并不总是赢的模式。然后我们可以发送一个状态为“普通游戏”或类似的东西,从不同的用例模块调用computerAlwaysWins.makeComputerMove()
,例如normalGame.makeComputerMove()
明白了吗
我想不出任何模式可以提供这样的东西……可能是因为我对它们了解不多。您应该将状态模式与观察者组合使用
public class GameStateContext {
PlayerState Player {get;set; }
// other properties that need to be shared
}
public interface IGameController {
void GoToState(State state)
}
public interface IGameState {
void Start();
void Update();
}
public abstract class GameStateBase : IGameState {
protected GameStateContext _context;
protected IGameController _parent;
public GameStateBase(GameStateContext context, IGameController parent) {
this._context = context;
this._parent = parent;
}
public virtual void Start() {
}
public virtual void Update() {
}
}
public class BonusLevelState : GameStateBase {
public public MainMenuState (GameStateContext context, IGameController parent) : base (context, parent) {
}
public override void Update() {
if(_context.Player.Health == 0) {
_parent.GoToState(GameStates.GameOver);
}
}
}
public GameController : IGameController {
public enum GameStates {
BonusLevel,
InitialState,
....
}
private IGameState currentState;
public GameController() {
// create diferent states
...
currentState = GetState(GameStates.InitialState);
}
public void Update {
currentState.Update();
}
public GoToState(State state) {
currentState = GetState(state);
}
}
我希望你有个主意,祝你好运 州模式听起来足够好吗?谷歌是你的朋友。