状态模式
一、状态模式概念
状态模式:将状态封装成独立的类,将状态机中的行为委托给当前状态实现。
二、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(); } } }