一、状态模式简介(Brief Introduction)
状态模式(State Pattern),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。二、解决的问题(What To Solve)
状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。
三、状态模式分析(Analysis)
Context:上下文,通常用来定义客户感兴趣的接口,同时维护一个来具体处理当前状态的实例对象
State:状态接口,用来封装与上下文的一个特定状态所对应的行为
ConcreteState:具体实现状态处理的类,每个类实现一个跟上下文相关的状态的具体处理
四、实例代码
1、上下文
public class Context {
private State state;
public void setState(State state){
this.state = state;
}
public void request(){
this.state.handler(this);
}
}
2、状态接口及其实现
public interface State {
public void handler(Context context);
}
public class ConcreteStateA implements State {
public void handler(Context context) {
System.out.println("当前状态为:"+this.getClass().getSimpleName());
}
}
public class ConcreteStateB implements State {
public void handler(Context context) {
System.out.println("当前状态为:"+this.getClass().getSimpleName());
}
}
3、客户端调用
public class Context {
private State state;
public void setState(State state){
this.state = state;
}
public void request(){
this.state.handler(this);
}
}
运行结果