实例
我们将创建一个定义操作的State接口和实现State接口的具体状态类。Context是承载State的类。
我们的演示类StatePatternDemo将使用Context和State对象根据所处状态的类型来演示Context行为的变化。
第1步 - 创建一个接口。 State.java
public interface State {
public void doAction(Context context);
}
第2步 - 创建实现相同接口的具体类。 StartState.java, StopState.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";
}
}
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步 - 创建上下文类。 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步 - 使用上下文看在行为改变时状态发生变化。 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 state
Start State
Player is in stop state
Stop State