面向对象的设计模式 ——状态模式
状态模式:状态类有相互自动转换的方法(根据拥有状态类的对象的信号切换)。
作用:其实状态方法最大的好处就是把过长过多的判断,分别放到各个类里面,根据信号来自动转换状态。
打个比喻:一个人的状态有三种:好状态、一般状态、坏状态。而人的睡眠时间就决定状态切换的信号。当某一天这个人的睡眠时间只有6个小时,那么初始化设置状态为好状态,在好状态里面判断发现睡眠时间太少,切换到一般状态,在一般状态里面发现这个睡眠时间太少,切换到坏状态。
abstract class State{
public abstract void Handle(Context context);
}
class ConcreteStateA extends State{
public void Handle(Context context){
context.State = new ConcreteStateB();
}
}
class ConcreteStateB extends State{
public void Handle(Context context){
context.State = new ConcreteStateA();
}
}
class Context{
private State state;
public Context(State state){
this.state = state;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
public void Request(){
state.Handle(this);
}
}
public class Test{
Context c = new Context(new ConcreteStateA());
c.Request();
c.Request();
c.Request();
c.Request();
}