状态模式(学习笔记)

状态模式

状态模式和策略模式的uml图是一样的!

除了名字之外都一样。

适用场景(引自百度百科):

1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

 

我倒是觉得,这两个模式的思想是一样的,策略模式是把解决问题的策略抽象为一个接口(或抽象类),Context只与接口耦合,从而降低了Context与具体解决方法的耦合,增加了灵活性。这里面,场景不同,策略变成了状态,解决的方式是一样的。

 

在这个场景里,有一点比较灵活,就是,我们可以把状态的管理工作放到具体的状态类(ConcreteState)中,这样,把状态管理的责任从Context中分摊到了ConcreteState中,解决了庞大分支语句的问题。

 

Java(伪代码)可以这么写:

Class Context{

         Statestate = null;//组合了一个状态接口。

         publichandle(){

//把根据状态做出的行为委托给State来做。

                   state.handle();

}

public Context(){

//构造器构造初始状态,当然,也可以是根据外界传递进来State构造

         state= new ConcreteState1(this);

…..

}

public setState(State state){

         this.state=state;

}

}

//具体的状态类,注意状态转移

Class ConcreteState1{

         Context context;

         //构造器

         public ConcreteState1(Context context){

                   this.context= context;

                   …….

}

//将状态管理分散到具体状态类中

Handle(){

         ….

         ….

         If(…)//在具体类中,可能根据情况,改变状态

                   this.setState(newConcreteState2());

….

}

}

 

把改变状态的任务分担到具体类中,这就是状态模式与策略模式上最大的不同。在状态模式的这个场景下,通常都可以这样灵活的做。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值