在状态模式中,类行为会根据其状态而更改.这种类型的设计模式属于行为模式.
在状态模式中,我们创建表示各种状态的对象和一个上下文对象,其行为随着状态对象的变化而变化.
实现
我们将创建一个 State 接口,用于定义实现 State 的动作和具体状态类接口. Context 是一个带有状态的类.
StatePatternDemo ,我们的演示类,将使用 Context 和状态对象,以根据它所处的状态类型演示Context行为的变化.
第1步
创建一个界面.
State.java
public interface State { public void doAction(Context context);}
步骤2
创建实现相同界面的具体类.
StartState.java
public class StartState implements State { public void doAction(Context context) { System.out.println("Player is in start state"); context.setState(this); } public String toString(){ return "Start State"; }}
StopState.java
public class StopState implements State { public void doAction(Context context) { System.out.println("Player is in stop state"); context.setState(this); } public String toString(){ return "Stop State"; } }
第3步
创建上下文 Class.
Context.java
public class Context { private State state; public Context(){ state = null; } public void setState(State state){ this.state = state; } public State getState(){ return state; }}
步骤4
使用上下文当 State 更改时看到行为的变化.
StatePatternDemo.java
public class StatePatternDemo { public static void main(String[] args) { Context context = new Context(); StartState startState = new StartState(); startState.doAction(context); System.out.println(context.getState().toString()); StopState stopState = new StopState(); stopState.doAction(context); System.out.println(context.getState().toString()); }}
步骤5
验证输出.
Player is in start stateStart StatePlayer is in stop stateStop State