Skip to content

Latest commit

 

History

History
65 lines (59 loc) · 1.46 KB

File metadata and controls

65 lines (59 loc) · 1.46 KB

状态模式(State Pattern)

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

状态模式的实例

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

class StartState {
    doAction(context) {
       console.log("Player is in start state");
       context.setState(this); 
    }
    toString(){
       return "Start State";
    }
}
class StopState {
    doAction(context) {
       console.log("Player is in stop state");
       context.setState(this); 
    }
    toString(){
       return "Stop State";
    }
}

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

class Context {
    constructor(){
       this.state = null;
    }
    setState(state){
       this.state = state;     
    }
    getState(){
       return this.state.toString();
    }
}

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

const context = new Context();
 
const startState = new StartState();
startState.doAction(context);

console.log(context.getState());

const stopState = new StopState();
stopState.doAction(context);

console.log(context.getState());
/**
 * output:
 * Player is in start state
 * Start State
 * Player is in stop state
 * Stop State
 */

状态模式的优势

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

上一页(观察者模式)

下一页(空对象模式)