二十一、状态模式
状态模式(State Pattern),类的行为是基于它的状态改变的,需要创建一个表示各种状态的对象以及一个行为随着状态对象变化而改动的对象。
简介
状态模式允许对象在内部状态发生变化时候改变它的行为,通过条件语句来判定。
- 优点:封装了转换规则、通过枚举状态便捷的扩展新状态和行为。共享对象,减少系统中对象个数。
- 状态模式的使用会增加系统的类及对象个数。实现复杂,不易准确构建。开闭原则的支持不太好。
实现
创建一State
接口和它的实现类,Context
是一个带有状态的行为类。
- 创建接口
State.java
public interface State {
public void doAction(Context context);
}
- 创建接口实现类
StartState.java
public class StartState implements State {
public void doAction(Context context){
System.out.println("Player is in start state");
}
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");
}
public String toString(){
return "Stop State";
}
}
- 创建行为类
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;
}
}
- 演示
StatePatternDemo.java
public class StatePatternDemo {
public static void main(String[] args){
Context context = new Context();
State 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