状态模式又称为状态对象模式,该模式允许一个对象在其内部状态改变时改变其行为
状态模式的定义 当一个对象内在状态改变时允许其改变行为,这个对象看起来改变了其类
状态模式的参与者
抽象状态角色
public abstract class State {
// 封装环境对象
protected Context context;
public void setContext(Context _context) {
this.context = _context;
}
// 定义状态下行为的忌口
public abstract void action();
}
具体对象角色
public class ConcreteState1 extends State {
// 实现一个状态所定义的行为
@Override
public void action() {
System.out.println("The action of concrete state1");
}
}
public class ConcreteState2 extends State {
@Override
public void action() {
System.out.println("the action of concrete state2");
}
}
上下文角色
public class Context {
public static State STATE1 = new ConcreteState1();
public static State STATE2 = new ConcreteState2();
// 具体状态类实例
private State currentState;
// 给出环境状态现有对象
public State getCurrentState() {
return currentState;
}
// 状态的切换
public void setCurrentState(State _currentState) {
this.currentState = _currentState;
currentState.setContext(this);
}
// 定义客户端需要的接口
public void handle1() {
this.setCurrentState(STATE1);
currentState.action();
}
// 定义客户端需要的接口
public void handle12() {
this.setCurrentState(STATE2);
currentState.action();
}
}
在上下文角色中,需要把状态对象声明为静态常量,有几个状态就要声明几个静态常量。 环境角色具有状态抽象角色的所有行为,具体执行使用委托方式。
状态模式的优点
状态模式的缺点
状态模式的使用场景