24 第24章 状态模式

24 第24章 状态模式

ID:5182537

大小:1.28 MB

页数:30页

时间:2017-11-27

24 第24章 状态模式_第1页
24 第24章 状态模式_第2页
24 第24章 状态模式_第3页
24 第24章 状态模式_第4页
24 第24章 状态模式_第5页
资源描述:

《24 第24章 状态模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第24章状态模式刘伟weiliu_china@yahoo.cn本章教学内容状态模式模式动机与定义模式结构与分析模式实例与解析模式效果与应用模式扩展状态模式模式动机在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。在UML中可以使用状态图来描述对象状态的变化。状态模式模式动机状态模式模式定义状态模式(StatePattern):允许一个对象在其

2、内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(ObjectsforStates),状态模式是一种对象行为型模式。状态模式模式定义StatePattern:Allowanobjecttoalteritsbehaviorwhenitsinternalstatechanges.Theobjectwillappeartochangeitsclass.Frequencyofuse:medium状态模式模式结构状态模式模式结构状态模式包含如下角色:Context:环境类State:抽象状态类ConcreteState:具体状态类状态模式模式

3、分析状态模式描述了对象状态的变化以及对象如何在每一种状态下表现出不同的行为。状态模式的关键是引入了一个抽象类来专门表示对象的状态,这个类我们叫做抽象状态类,而对象的每一种具体状态类都继承了该类,并在不同具体状态类中实现了不同状态的行为,包括各种状态之间的转换。状态模式模式分析状态模式模式分析不使用状态模式:……if(state=="空闲"){if(预订房间){预订操作;state="已预订";}elseif(住进房间){入住操作;state="已入住";}}elseif(state=="已预订"){if(住进房间){入住操作;state="已入住";}el

4、seif(取消预订){取消操作;state="空闲";}}……状态模式模式分析状态模式模式分析使用状态模式重构之后的代码://重构之后的“空闲状态类”示例代码……if(预订房间){预订操作;context.setState(new已预订状态类());}elseif(住进房间){入住操作;context.setState(new已入住状态类());}……状态模式模式分析在状态模式结构中需要理解环境类与抽象状态类的作用:环境类实际上就是拥有状态的对象,环境类有时候可以充当状态管理器(StateManager)的角色,可以在环境类中对状态进行切换操作。抽象状态类

5、可以是抽象类,也可以是接口,不同状态类就是继承这个父类的不同子类,状态类的产生是由于环境类存在多个状态,同时还满足两个条件:这些状态经常需要切换,在不同的状态下对象的行为不同。因此可以将不同对象下的行为单独提取出来封装在具体的状态类中,使得环境类对象在其内部状态改变时可以改变它的行为,对象看起来似乎修改了它的类,而实际上是由于切换到不同的具体状态类实现的。由于环境类可以设置为任一具体状态类,因此它针对抽象状态类进行编程,在程序运行时可以将任一具体状态类的对象设置到环境类中,从而使得环境类可以改变内部状态,并且改变行为。状态模式状态模式实例与解析实例一:论坛

6、用户等级在某论坛系统中,用户可以发表留言,发表留言将增加积分;用户也可以回复留言,回复留言也将增加积分;用户还可以下载文件,下载文件将扣除积分。该系统用户分为三个等级,分别是新手、高手和专家,这三个等级对应三种不同的状态,这三种状态分别定义如下:(1)如果积分小于100分,则为新手状态,用户可以发表留言、回复留言,但是不能下载文件。如果积分大于等于1000分,则转换为专家状态;如果积分大于等于100分,则转换为高手状态。(2)如果积分大于等于100分但小于1000分,则为高手状态,用户可以发表留言、回复留言,还可以下载文件,而且用户在发表留言时可以获取双倍

7、积分。如果积分小于100分,则转换为新手状态;如果积分大于等于1000分,则转换为专家状态;如果下载文件后积分小于0,则不能下载该文件。(3)如果积分大于等于1000分,则为专家状态,用户可以发表留言、回复留言和下载文件,用户除了在发表留言时可以获取双倍积分外,下载文件只扣除所需积分的一半。如果积分小于100分,则转换为新手状态;如果积分小于1000分,但大于等于100,则转换为高手状态;如果下载文件后积分小于0,则不能下载该文件。状态模式状态模式实例与解析实例一:论坛用户等级状态模式状态模式实例与解析实例一:论坛用户等级参考代码(Chapter24Sta

8、tesample01)演示……状态模式状态模式实例与解析实例二:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。