状态模式
public class Context{
// 环境类
private State state; // 当前环境的状态
public void serState(State state){
this.state = state; // 设置环境的当前状态
}
public void getState(){
return this.state; // 获取环境的当前状态
}
public handler(){
state.handler(this); // 状态自动变化,环境会改变自身状态到下一个状态
}
}
public interface State{
void handler(Context context);
}
public class ConcerteStateA implements State{
@Override
public void handler(Context context){
System.out.println("当前状态是A");
context.handler(new ConcerteStateB()); // 状态A执行完后状态改为状态B
}
}
public class ConcerteStateB implements State{
@Override
public void handler(Context context){
System.out.println("当前状态是B");
context.handler(new ConcerteStateA()); // 状态B执行完后状态改为A
}
}
public class Client{
public static void main(String[] args){
Context context = new Context();
context.setState(new ConcerteStateB); // 设置当前状态
context.handler(); // 状态B执行,然后将环境的状态置为A
context.handler(); // 状态A执行,然后将环境的状态置为B
}
}
状态模式的精髓在于,状态可以按内置顺序可以自动变化,不用每次都手动指定。当有新的状态要添加时,只需要修改新状态的上级状态。