状态模式

来源:互联网 发布:数据库百度百科 编辑:程序博客网 时间:2024/05/19 01:06

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

类图:

代码:

publicclass Context {

    private Statestate;

    public Context(State state){

       this.state=state;

    }

    public State getState() {

       returnstate;

    }

    publicvoid setState(State state) {

       this.state = state;

    }

    publicvoid request(){

       if(state!=null){        

           state.handle(this);

       }

    }

}

publicinterface State {

    void handle(Context context);

}

publicclass ConcreteStateAimplements State{

    @Override

    publicvoid handle(Context context) {

       context.setState(new ConcreteStateB());

       System.out.println("状态非常好!!");

    }

}

publicclass ConcreteStateBimplements State{

    @Override

    publicvoid handle(Context context) {

       context.setState(new ConcreteStateC());

       System.out.println("状态一般!!");

    }

}

publicclass ConcreteStateCimplements State{

    @Override

    publicvoid handle(Context context) {

       context.setState(new ConcreteStateA());

       System.out.println("状态差,补充体力!!!");

    }

}

publicstaticvoid main(String[] args) {

       Context context=new Context(new ConcreteStateA());

             

       context.request();

       context.request();

       context.request();

       context.request();

    }

优点:把不同状态的代码分离,根据状态改变行为。

缺点:状态的顺序决定了,修改,增加和删除状态都比较困难。

      当一个对象的行为取决于的状态,并且它必须在运行时根据状态改变它的行为就可以考虑用状态模式。优化一个功能需要多个实现方案。

原创粉丝点击