面向对象的设计模式 ——状态模式

状态模式:状态类有相互自动转换的方法(根据拥有状态类的对象的信号切换)。

作用:其实状态方法最大的好处就是把过长过多的判断,分别放到各个类里面,根据信号来自动转换状态。

打个比喻:一个人的状态有三种:好状态、一般状态、坏状态。而的睡眠时间就决定状态切换的信号。当某一天这个人的睡眠时间只有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();
    
}