状态模式

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

类图:

代码:

publicclass Context {

    private State state;

    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 ConcreteStateA implements State{

    @Override

    publicvoid handle(Context context) {

       context.setState(new ConcreteStateB());

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

    }

}

publicclass ConcreteStateB implements State{

    @Override

    publicvoid handle(Context context) {

       context.setState(new ConcreteStateC());

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

    }

}

publicclass ConcreteStateC implements 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();

    }

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值