美文网首页
状态模式

状态模式

作者: 守住阳光 | 来源:发表于2018-08-07 14:00 被阅读0次

    一、概念

            状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

    二、UML类图 

    三、基本代码实现

    1、 State,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为

    public abstract class State {

            public abstract void handle(Context context);

    }

    2、具体状态类,每一个自来实现一个与 Context 的一个状态相关的行为

    public class ConcreteStateA extends State{

            @Override

            public void handle(Context context) {

                context.setState(new ConcreteStateB());

            }

    }

    public class ConcreteStateB extends State{

            @Override

            public void handle(Context context) {

                context.setState(new ConcreteStateC());

            }

    }

    3、Context 类,维护一个ConcreteState子类的实例,这个实例定义当前的状态

    public class Context {

        private State state ;

        public Context(State state){

            this.state = state;

        }

        public State getState() {

              return state;

        }

        public void setState(State state) {

               this.state = state;

        }

        public void request(){

                state.handle(this);

         }

    }

    4、客户端类

    public class Main {

            public static void main(String[] args) {

                Context c = new Context(new ConcreteStateA());

                c.request();

                c.request();

            }

    }

    四、总结

                状态模式将与特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和转换。

                状态模式通过把各种状态转逻辑分布到State的子类中,来减少相互间的依赖。

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

    相关文章

      网友评论

          本文标题:状态模式

          本文链接:https://www.haomeiwen.com/subject/wroovftx.html