状态模式

一、状态模式概念

状态模式:将状态封装成独立的类,将状态机中的行为委托给当前状态实现。

二、UML图

我们可以看到状态和状态机实现相同的操作,状态被封装成类,状态机将操作委托给当前状态,当前状态可以通过setState()来改变状态机的当前状态来实现状态转换。

三、代码

State.java

public interface State {
    void change();
}

StateA.java

public class StateA implements State {
    StateMachine m;
    StateA(StateMachine m) {
        this.m = m;
    }
    public void change() {
        m.setState(m.stateB);
        System.out.println("StateA");
    }
}

StateB.java

public class StateB implements State{
    StateMachine m;
    StateB(StateMachine m) {
        this.m = m;
    }
    public void change() {
        m.setState(m.stateA);
        System.out.println("StateB");
    }
}

StateMachine.java

public class StateMachine {
    State stateA;
    State stateB;
    State state;
    StateMachine() {
        stateA = new StateA(this);
        stateB = new StateB(this);
        state = stateA;
    }
    void change() {
        state.change();
    }
    void setState(State state) {
        this.state = state;
    }
    public static void main(String[] args) {
        StateMachine m = new StateMachine();
        int c = 5;
        while(c-->0) {
            m.change();
        }
    }
}

 

posted @ 2019-12-03 20:04  卑微芒果  Views(125)  Comments(0Edit  收藏  举报