状态模式(学习笔记)

原创 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());

….

}

}

 

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

NRF24l01+学习笔记

一、 SPI的通信协议 SPI(Serial Peripheral Interface)是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交...
  • qq_30650153
  • qq_30650153
  • 2016年05月08日 11:05
  • 2721

【设计模式】学习笔记14:状态模式(State)

认识状态模式 假设有一个糖果机, 它的工作状态图如下:要用代码实现糖果机的功能, 如果不用状态模式: 一种方法是创建一个类,它的作用就是一个状态机,对每一个动作,我们都创建了一个对应的方法,这些方法...
  • shuangde800
  • shuangde800
  • 2013年08月22日 00:15
  • 19527

机器学习笔记(十六)强化学习

16.强化学习 16.1任务与奖赏 强化学习(reinforcementlearning)的过程就是机器通过一系列的动作和环境交互,从而得到最佳的动作序列。图示: 强化学习任务用马尔可夫决策(M...
  • fjssharpsword
  • fjssharpsword
  • 2017年06月02日 16:58
  • 2571

java学习笔记_状态模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:   状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模...
  • dragon20121114
  • dragon20121114
  • 2013年04月23日 11:37
  • 284

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

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

设计模式C++学习笔记之十九(State状态模式)

设计模式C++学习笔记之十九(State状态模式) 19.1.解释 概念:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 main(),客户 CLiftState...
  • DSIslander
  • DSIslander
  • 2012年11月23日 11:45
  • 296

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

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

【设计模式学习笔记】状态模式

定义 状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。[DP] 状态模式主要解决的的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻...
  • MacYosef
  • MacYosef
  • 2017年12月24日 16:34
  • 39

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

1. 概述   当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 2. 解决的问题   主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态...
  • mydriverc2
  • mydriverc2
  • 2013年09月26日 14:35
  • 337

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

定义: 当一个对象内在的状态改变时,允许其改变行为,这个对象看起来像是改变了其类。 状态模式不太好理解,我现在还没有完全理解,这个模式给我的第一印象就是比较乱,给我的感觉好像是两个类互相依赖,①调...
  • hackerain
  • hackerain
  • 2012年05月06日 12:59
  • 653
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:状态模式(学习笔记)
举报原因:
原因补充:

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