状态模式(State Pattern)

即类的行为根据状态的改变而改变。

状态模式的实例

举例定义了两种状态,开始状态和结束状态

  1. class StartState {
  2. doAction(context) {
  3. console.log("Player is in start state");
  4. context.setState(this);
  5. }
  6. toString(){
  7. return "Start State";
  8. }
  9. }
  10. class StopState {
  11. doAction(context) {
  12. console.log("Player is in stop state");
  13. context.setState(this);
  14. }
  15. toString(){
  16. return "Stop State";
  17. }
  18. }

定义根据状态,而发生改变的上下文类型。

  1. class Context {
  2. constructor(){
  3. this.state = null;
  4. }
  5. setState(state){
  6. this.state = state;
  7. }
  8. getState(){
  9. return this.state.toString();
  10. }
  11. }

那么在使用的时候,当Context的状态发生改变,那么Context获取状态的行为也发生了改变

  1. const context = new Context();
  2. const startState = new StartState();
  3. startState.doAction(context);
  4. console.log(context.getState());
  5. const stopState = new StopState();
  6. stopState.doAction(context);
  7. console.log(context.getState());
  8. /**
  9. * output:
  10. * Player is in start state
  11. * Start State
  12. * Player is in stop state
  13. * Stop State
  14. */

状态模式的优势

适合一些需要根据状态而改变的类,或通过此来消除一些if…else语句。

上一页(观察者模式)

下一页(空对象模式)