大话设计模式-第16章 无尽加班何时休--状态模式- 高飞网

第16章 无尽加班何时休--状态模式

2016-02-02 16:40:51.0

状态模式(State):当一个对象的内存状态改变时允许改变其行为,这个对象看起来像是改变了其类。  
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中。

使用状态模式可以消除庞大的条件分支语句,状态模式通过把状态转移逻辑分布到State的子类之间,来减少想到间的依赖。

应用:当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式。  


public abstract class State{
        public abstract void handler(Context context);
}
public class ConcreteStateA extends State{
        public void handler(Context context){
                context.setState(new ConcreteStateA());
        }
}
public class ConcreteStateB extends State{
        public void handler(Context context){
                context.setState(new ConcreteStateB());
        }
}
public class Context{
        private State state;

        public void setState(State state){
                this.state = state;
                System.out.println("当前状态:"+state.getClass());
        }

        public State getState(){
                return this.state;
        }

        public void request(){
                this.state.handler(this);
        }
}
public class App{
        public static void main(String[] args){
                ConcreteStateA state = new ConcreteStateA();

                Context context = new Context();
                context.setState(state);

                context.request();
                context.request();
                context.request();

        }
}