状态模式-PPT精选课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《状态模式-PPT精选课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 状态 模式 PPT 精选 课件
- 资源描述:
-
1、第24章状态模式刘刘 伟伟weiliu_chinayahoo本章教学内容w 状态模式 模式动机与定义模式动机与定义 模式结构与分析模式结构与分析 模式实例与解析模式实例与解析 模式效果与应用模式效果与应用 模式扩展模式扩展状态模式w 模式动机在很多情况下,在很多情况下,一个对象的行为取决于一个或多个动态一个对象的行为取决于一个或多个动态变化的属性变化的属性,这样的属性叫做,这样的属性叫做状态状态,这样的对象叫做,这样的对象叫做有有状态的状态的(stateful)对象对象,这样的对象状态是从事先定义,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件好的一系列值中取出的。
2、当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。为也随之发生变化。在在UML中可以使用中可以使用状态图状态图来描述对象状态的变化。来描述对象状态的变化。状态模式w模式动机中奖失恋开心do/唱歌do/请客吃饭.伤心do/撞墙do/疯狂购物.状态模式w 模式定义状态模式状态模式(State Pattern):允许一个对象:允许一个对象在其内部状在其内部状态改变时改变它的行为态改变时改变它的行为,对象看起来似乎修改了它的类对象看起来似乎修改了它的类。其别名为其别名为状态对象状态对象(Objects for S
3、tates),状态模式是,状态模式是一种一种对象行为型对象行为型模式。模式。状态模式w 模式定义State Pattern:Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.Frequency of use:medium状态模式w 模式结构stateContext-state:State+request()setState(State state).State+handle().ConcreteStateA+handle
4、().ConcreteStateB+handle().state.handle();.状态模式w 模式结构状态模式包含如下角色:状态模式包含如下角色:Context:环境类 State:抽象状态类 ConcreteState:具体状态类状态模式w 模式分析状态模式描述了状态模式描述了对象状态的变化对象状态的变化以及以及对象如何在每一对象如何在每一种状态下表现出不同的行为种状态下表现出不同的行为。状态模式的关键是状态模式的关键是引入了一个抽象类来专门表示对象引入了一个抽象类来专门表示对象的状态的状态,这个类我们叫做,这个类我们叫做抽象状态类抽象状态类,而对象的每一,而对象的每一种具体状态类都继承
5、了该类,并种具体状态类都继承了该类,并在不同具体状态类中在不同具体状态类中实现了不同状态的行为实现了不同状态的行为,包括各种状态之间的转换包括各种状态之间的转换。状态模式w 模式分析状态模式w 模式分析 不使用状态模式:不使用状态模式:if(state=空闲)if(预订房间)预订操作;state=已预订;else if(住进房间)入住操作;state=已入住;else if(state=已预订)if(住进房间)入住操作;state=已入住;else if(取消预订)取消操作;state=空闲;状态模式w 模式分析状态模式w 模式分析 使用状态模式重构之后的代码:使用状态模式重构之后的代码:/重
6、构之后的“空闲状态类”示例代码if(预订房间)预订操作;context.setState(new 已预订状态类();else if(住进房间)入住操作;context.setState(new 已入住状态类();状态模式w 模式分析 在状态模式结构中需要理解在状态模式结构中需要理解环境类与抽象状态类环境类与抽象状态类的作用:的作用:环境类实际上就是拥有状态的对象,环境类有时候可以充当状态管理器(State Manager)的角色,可以在环境类中对状态进行切换操作。抽象状态类可以是抽象类,也可以是接口,不同状态类就是继承这个父类的不同子类,状态类的产生是由于环境类存在多个状态,同时还满足两个条件
7、:这些状态经常需要切换,在不同的状态下对象的行为不同。因此可以将不同对象下的行为单独提取出来封装在具体的状态类中,使得环境类对象在其内部状态改变时可以改变它的行为,对象看起来似乎修改了它的类,而实际上是由于切换到不同的具体状态类实现的。由于环境类可以设置为任一具体状态类,因此它针对抽象状态类进行编程,在程序运行时可以将任一具体状态类的对象设置到环境类中,从而使得环境类可以改变内部状态,并且改变行为。状态模式w 状态模式实例与解析实例一:论坛用户等级实例一:论坛用户等级 在某论坛系统中,用户可以发表留言,发表留言将增加积分;用户也可以回复留言,回复留言也将增加积分;用户还可以下载文件,下载文件将
8、扣除积分。该系统用户分为三个等级,分别是新手、高手和专家,这三个等级对应三种不同的状态,这三种状态分别定义如下:(1)如果积分小于100分,则为新手状态,用户可以发表留言、回复留言,但是不能下载文件。如果积分大于等于1000分,则转换为专家状态;如果积分大于等于100分,则转换为高手状态。(2)如果积分大于等于100分但小于1000分,则为高手状态,用户可以发表留言、回复留言,还可以下载文件,而且用户在发表留言时可以获取双倍积分。如果积分小于100分,则转换为新手状态;如果积分大于等于1000分,则转换为专家状态;如果下载文件后积分小于0,则不能下载该文件。(3)如果积分大于等于1000分,则
9、为专家状态,用户可以发表留言、回复留言和下载文件,用户除了在发表留言时可以获取双倍积分外,下载文件只扣除所需积分的一半。如果积分小于100分,则转换为新手状态;如果积分小于1000分,但大于等于100,则转换为高手状态;如果下载文件后积分小于0,则不能下载该文件。状态模式w 状态模式实例与解析实例一:论坛用户等级实例一:论坛用户等级 状态模式w 状态模式实例与解析实例一:论坛用户等级实例一:论坛用户等级 参考代码(Chapter 24 Statesample01)演示演示状态模式w 状态模式实例与解析实例二:银行账户实例二:银行账户 在某银行系统定义的账户有三种状态:(1)如果账户(Accou
10、nt)中余额(balance)大于等于0,此时账户的状态为绿色(GreenState),即正常状态,表示既可以向该账户存款(deposit)也可以从该账户取款(withdraw);(2)如果账户中余额小于0,并且大于等于-1000,则账户的状态为黄色(YellowState),即欠费状态,此时既可以向该账户存款也可以从该账户取款;(3)如果账户中余额小于-1000,那么账户的状态为红色(RedState),即透支状态,此时用户只能向该账户存款,不能再从中取款。现用状态模式来实现状态的转化问题,用户只需要执行简单的存款和取款操作,系统根据余额数量自动转换到相应的状态。状态模式w 状态模式实例与解
展开阅读全文