原文链接:http://www.tutorialspoint.com/design_pattern/state_pattern.htm
在状态模式中,一个类的行为会随着其状态的改变而改变。状态模式属于行为模式的一种。
在状态模式中,我们会创建一组对象,这组对象代表着各种状态。我们还会创建一个 context 上下文对象,这个 context 对象的行为会随其状态的改变而改变。
实现
我们将会创建一个 State 接口,这个接口有一种行为。同时创建一个实现了 State 接口的具体状态类。Context 类有一个 State 成员,State 成员就是它的状态。
StatePatternDemo 是我们的 demo 类,我们将会使用 Context 和 state 对象来演示 Context 对象的行为会随着其 state 对象的种类的改变而改变。
第一步
创建 State 接口。
State.java
public interface State {
public void doAction(Context context);
}
第二步
创建 State 接口的实现类。
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";
}
}
第三步
创建 Context 对象。
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;
}
}
第四步
使用 Context 来观察其行为随着其状态的改变而发生改变。
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);
}
}
第五步
验证输出:
Player is in start state
Start state
Player is in stop state
Stop state