状态模式.ppt_第1页
状态模式.ppt_第2页
状态模式.ppt_第3页
状态模式.ppt_第4页
状态模式.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DesignPatterns,状态模式,河南理工大学,大纲,状态模式概述状态模式的结构与实现状态模式的应用实例共享状态使用环境类实现状态转换状态模式的优缺点与适用环境,状态模式概述,H2O的三种状态(未考虑临界点),状态模式概述,分析在软件系统中:有些对象具有多种状态这些状态在某些情况下能够相互转换对象在不同的状态下将具有不同的行为复杂的条件判断语句来进行状态的判断和转换操作导致代码的可维护性和灵活性下降出现新的状态时,代码的扩展性很差,客户端代码也需要进行相应的修改,违背了开闭原则,状态模式概述,状态模式的定义对象行为型模式,状态模式概述,状态模式的定义又名状态对象(ObjectsforStates)用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理,状态模式的结构与实现,状态模式的结构,状态模式的结构与实现,状态模式的结构状态模式包含以下3个角色:Context(环境类)State(抽象状态类)ConcreteState(具体状态类),状态模式的结构与实现,状态模式的实现典型的抽象状态类代码:,状态模式的结构与实现,状态模式的实现典型的具体状态类代码:,状态模式的结构与实现,状态模式的实现典型的环境类代码:,状态模式的结构与实现,状态模式的实现状态转换的实现:(1)统一由环境类来负责状态之间的转换,环境类充当了状态管理器(StateManager)角色,状态模式的结构与实现,状态模式的实现状态转换的实现:(2)由具体状态类来负责状态之间的转换,可以在具体状态类的业务方法中判断环境类的某些属性值,再根据情况为环境类设置新的状态对象,实现状态转换,状态模式的应用实例,实例说明,状态模式的应用实例,实例分析与类图,银行账户状态图,状态模式的应用实例,实例分析与类图,银行账户结构图,状态模式,状态模式实例与解析实例一:论坛用户等级在某论坛系统中,用户可以发表留言,发表留言将增加积分;用户也可以回复留言,回复留言也将增加积分;用户还可以下载文件,下载文件将扣除积分。该系统用户分为三个等级,分别是新手、高手和专家,这三个等级对应三种不同的状态,这三种状态分别定义如下:(1)如果积分小于100分,则为新手状态,用户可以发表留言、回复留言,但是不能下载文件。如果积分大于等于1000分,则转换为专家状态;如果积分大于等于100分,则转换为高手状态。(2)如果积分大于等于100分但小于1000分,则为高手状态,用户可以发表留言、回复留言,还可以下载文件,而且用户在发表留言时可以获取双倍积分。如果积分小于100分,则转换为新手状态;如果积分大于等于1000分,则转换为专家状态;如果下载文件后积分小于0,则不能下载该文件。(3)如果积分大于等于1000分,则为专家状态,用户可以发表留言、回复留言和下载文件,用户除了在发表留言时可以获取双倍积分外,下载文件只扣除所需积分的一半。如果积分小于100分,则转换为新手状态;如果积分小于1000分,但大于等于100,则转换为高手状态;如果下载文件后积分小于0,则不能下载该文件。,状态模式,共享状态,动机在有些情况下,多个环境对象可能需要共享同一个状态如果希望在系统中实现多个环境对象共享一个或多个状态对象,那么需要将这些状态对象定义为环境类的静态成员对象,共享状态,实例,共享状态,结构,开关及其状态设计结构图,使用环境类实现状态转换,动机对于客户端而言,无须关心状态类,可以为环境类设置默认的状态类,将状态的转换工作交给环境类(或具体状态类)来完成,具体的转换细节对于客户端而言是透明的可以通过环境类来实现状态转换,环境类作为一个状态管理器,统一实现各种状态之间的转换操作,使用环境类实现状态转换,实例,使用环境类实现状态转换,结构,屏幕放大镜工具结构图,状态模式的优缺点与适用环境,模式优点封装了状态的转换规则,可以对状态转换代码进行集中管理,而不是分散在一个个业务方法中将所有与某个状态有关的行为放到一个类中,只需要注入一个不同的状态对象即可使环境对象拥有不同的行为允许状态转换逻辑与状态对象合成一体,而不是提供一个巨大的条件语句块,可以避免使用庞大的条件语句来将业务方法和状态转换代码交织在一起可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数,状态模式的优缺点与适用环境,模式缺点会增加系统中类和对象的个数,导致系统运行开销增大结构与实现都较为复杂,如果使用不当将导致程序结构和代码混乱,增加系统设计的难度对开闭原则的支持并不太好,增加新的状态类需要修改负责状态转换的源代码,否则无法转换到新增状态;而且修改某个状态类的行为也需要修改对应类的源代码,状态模式的优缺点与适用环境,模式适用环境对象的行为依赖于它的状态(例如某些

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论