状态模式(学习笔记)

原创 2012年03月30日 10:49:14

状态模式

状态模式和策略模式的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());

….

}

}

 

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

相关文章推荐

java学习笔记_状态模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:   状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模...

设计模式学习笔记(状态模式)

模式中的角色: State:抽象状态角色 ConcreteState:具体状态角色 Context:环境角色 状态模式通用类图如下 具体的类图如下 代码实现...

设计模式学习笔记——状态模式

定义: 当一个对象内在的状态改变时,允许其改变行为,这个对象看起来像是改变了其类。 状态模式不太好理解,我现在还没有完全理解,这个模式给我的第一印象就是比较乱,给我的感觉好像是两个类互相依赖,①调...

设计模式学习笔记---状态模式state pattern(Java版)

一、场景 红绿灯 红灯、黄灯、绿灯 网上购物,订单的状态 下单、已付款、已发货、送货中、已收货 电梯运行 维修、正常、自动开关、自动开门、消防状态、向上运动、向下运动 酒店系统,房间的状...

Head First设计模式学习笔记-------(12)状态模式

我们今天开门见山吧,我们又接到了一个新的项目,让我们看看这次的项目是什么吧 对于大家学了熟练的开发技巧,看到这么一个项目,是不是内心第一个想法就是------真TM简单。 public c...

设计模式学习笔记之状态模式

定义: 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。...
  • guo_net
  • guo_net
  • 2014年07月27日 10:53
  • 366

《Head First 设计模式》学习笔记——状态模式

在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂状态的...

[学习笔记]设计模式[a]-{状态模式}

状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。...

学习笔记——JAVA设计模式<20>状态模式

状态模式state核心 –用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 结构 –Context环境类 环境类中维护一个state对象,他是定义了当前的状态 –State抽象状...

设计模式学习笔记--状态模式

今天来学习一下设计模式中的状态模式。之前经常听说状态机之类的东东,自己也有用过,但是状态机和状态模式还是有一些区别,今天主要看一下状态模式的定义,例子,应用,最后再分析一下状态模式和我们所说的有限状态...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:状态模式(学习笔记)
举报原因:
原因补充:

(最多只允许输入30个字)