状态模式课件.ppt

上传人:rrsccc 文档编号:10251430 上传时间:2021-05-03 格式:PPT 页数:28 大小:2.18MB
返回 下载 相关 举报
状态模式课件.ppt_第1页
第1页 / 共28页
状态模式课件.ppt_第2页
第2页 / 共28页
状态模式课件.ppt_第3页
第3页 / 共28页
状态模式课件.ppt_第4页
第4页 / 共28页
状态模式课件.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《状态模式课件.ppt》由会员分享,可在线阅读,更多相关《状态模式课件.ppt(28页珍藏版)》请在三一文库上搜索。

1、状态模式,Design Patterns,状态模式,状态模式,2,大纲,状态模式概述 状态模式的结构与实现 状态模式的应用实例 共享状态 使用环境类实现状态转换 状态模式的优缺点与适用环境,状态模式,3,状态模式概述,H2O的三种状态(未考虑临界点),状态模式,4,状态模式概述,分析 在软件系统中: 有些对象具有多种状态 这些状态在某些情况下能够相互转换 对象在不同的状态下将具有不同的行为 复杂的条件判断语句来进行状态的判断和转换操作 导致代码的可维护性和灵活性下降 出现新的状态时,代码的扩展性很差,客户端代码也需要进行相应的修改,违背了开闭原则,状态模式,5,状态模式概述,状态模式的定义 对

2、象行为型模式,状态模式,6,状态模式概述,状态模式的定义 又名状态对象(Objects for States) 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题 将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化 对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理,状态模式,7,状态模式的结构与实现,状态模式的结构,状态模式,8,状态模式的结构与实现,状态模式的结构 状态模式包含以下3个角色: Context(环境类) State(抽象状态类) ConcreteState(具体状态类),状态模式

3、,9,状态模式的结构与实现,状态模式的实现 典型的抽象状态类代码:,状态模式,10,状态模式的结构与实现,状态模式的实现 典型的具体状态类代码:,状态模式,11,状态模式的结构与实现,状态模式的实现 典型的环境类代码:,状态模式,12,状态模式的结构与实现,状态模式的实现 状态转换的实现: (1) 统一由环境类来负责状态之间的转换,环境类充当了状态管理器(State Manager)角色,状态模式,13,状态模式的结构与实现,状态模式的实现 状态转换的实现: (2) 由具体状态类来负责状态之间的转换,可以在具体状态类的业务方法中判断环境类的某些属性值,再根据情况为环境类设置新的状态对象,实现状

4、态转换,状态模式,14,状态模式的应用实例,实例说明,状态模式,15,状态模式的应用实例,实例分析与类图,银行账户状态图,状态模式,16,状态模式的应用实例,实例分析与类图,银行账户结构图,状态模式,17,状态模式,状态模式实例与解析 实例一:论坛用户等级 在某论坛系统中,用户可以发表留言,发表留言将增加积分;用户也可以回复留言,回复留言也将增加积分;用户还可以下载文件,下载文件将扣除积分。该系统用户分为三个等级,分别是新手、高手和专家,这三个等级对应三种不同的状态,这三种状态分别定义如下: (1) 如果积分小于100分,则为新手状态,用户可以发表留言、回复留言,但是不能下载文件。如果积分大于

5、等于1000分,则转换为专家状态;如果积分大于等于100分,则转换为高手状态。 (2) 如果积分大于等于100分但小于1000分,则为高手状态,用户可以发表留言、回复留言,还可以下载文件,而且用户在发表留言时可以获取双倍积分。如果积分小于100分,则转换为新手状态;如果积分大于等于1000分,则转换为专家状态;如果下载文件后积分小于0,则不能下载该文件。 (3) 如果积分大于等于1000分,则为专家状态,用户可以发表留言、回复留言和下载文件,用户除了在发表留言时可以获取双倍积分外,下载文件只扣除所需积分的一半。如果积分小于100分,则转换为新手状态;如果积分小于1000分,但大于等于100,则

6、转换为高手状态;如果下载文件后积分小于0,则不能下载该文件。,状态模式,18,状态模式,状态模式,19,共享状态,动机 在有些情况下,多个环境对象可能需要共享同一个状态 如果希望在系统中实现多个环境对象共享一个或多个状态对象,那么需要将这些状态对象定义为环境类的静态成员对象,状态模式,20,共享状态,实例,状态模式,21,共享状态,结构,开关及其状态设计结构图,状态模式,22,使用环境类实现状态转换,动机 对于客户端而言,无须关心状态类,可以为环境类设置默认的状态类,将状态的转换工作交给环境类(或具体状态类)来完成,具体的转换细节对于客户端而言是透明的 可以通过环境类来实现状态转换,环境类作为

7、一个状态管理器,统一实现各种状态之间的转换操作,状态模式,23,使用环境类实现状态转换,实例,状态模式,24,使用环境类实现状态转换,结构,屏幕放大镜工具结构图,状态模式,25,状态模式的优缺点与适用环境,模式优点 封装了状态的转换规则,可以对状态转换代码进行集中管理,而不是分散在一个个业务方法中 将所有与某个状态有关的行为放到一个类中,只需要注入一个不同的状态对象即可使环境对象拥有不同的行为 允许状态转换逻辑与状态对象合成一体,而不是提供一个巨大的条件语句块,可以避免使用庞大的条件语句来将业务方法和状态转换代码交织在一起 可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数,状态模式

8、,26,状态模式的优缺点与适用环境,模式缺点 会增加系统中类和对象的个数,导致系统运行开销增大 结构与实现都较为复杂,如果使用不当将导致程序结构和代码混乱,增加系统设计的难度 对开闭原则的支持并不太好,增加新的状态类需要修改负责状态转换的源代码,否则无法转换到新增状态;而且修改某个状态类的行为也需要修改对应类的源代码,状态模式,27,状态模式的优缺点与适用环境,模式适用环境 对象的行为依赖于它的状态(例如某些属性值),状态的改变将导致行为的变化 在代码中包含大量与对象状态有关的条件语句,这些条件语句的出现会导致代码的可维护性和灵活性变差,不能方便地增加和删除状态,并且导致客户类与类库之间的耦合增强,状态模式,28,END,Thanks!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1