在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。
意图
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
实现
实现如下
判断一个Context的状态变化
- 创建接口
public interface State {
void doAction(Context context);
}
- 实现接口
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";
}
}
- 创建Context类
public class Context {
private State state;
public Context(){
state = null;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
}
- 使用
public 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());
}
- 结果
I/System.out: Player is in start state
I/System.out: Start State
I/System.out: Player is in stop state
I/System.out: Stop State