设计模式状态模式.pptx

上传人:莉*** 文档编号:73621121 上传时间:2023-02-20 格式:PPTX 页数:30 大小:1.08MB
返回 下载 相关 举报
设计模式状态模式.pptx_第1页
第1页 / 共30页
设计模式状态模式.pptx_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《设计模式状态模式.pptx》由会员分享,可在线阅读,更多相关《设计模式状态模式.pptx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、leAll()if(behaviour=0)/do something else if(behaviour=1)/do something else if(behaviour=2)/do something else if(behaviour=3)/do something .some more else if.第3页/共30页状态模式概述状态模式的定义对象行为型模式状状态态模模式式:允许一个对象在其内内部部状状态态改改变变时时改改变变它它的的行行为为。对象看起来似乎修改了它的类。对象看起来似乎修改了它的类。State Pattern:Allow an object to alter its

3、behavior when its internal state changes.The object will appear to change its class.第4页/共30页状态模式概述状态模式的定义又名状态对象(Objects for States)用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理第5页/共30页状态模式的结构与实现状态模式的结构第6页/共30页状态模式的结构与实现状态

4、模式的结构状态模式包含以下3个角色:Context(环境类)State(抽象状态类)ConcreteState(具体状态类)第7页/共30页状态模式的结构与实现状态模式的实现典型的抽象状态类代码:abstract class State /声明抽象业务方法,不同的具体状态类可以有不同的实现 public abstract void Handle();第8页/共30页状态模式的结构与实现状态模式的实现典型的具体状态类代码:class ConcreteState:State public override void Handle()/方法具体实现代码 第9页/共30页状态模式的结构与实现状态模式的

5、实现典型的环境类代码:class Context private State state;/维持一个对抽象状态对象的引用维持一个对抽象状态对象的引用 private int value;/其他属性值,该属性值的变化可能会导致对象状态发生变化其他属性值,该属性值的变化可能会导致对象状态发生变化 /设置状态对象 public void SetState(State state)this.state=state;public void Request()/其他代码其他代码state.Handle();/调用状态对象的业务方法调用状态对象的业务方法/其他代码其他代码 第10页/共30页状态模式的结构与

6、实现状态模式的实现状态转换的实现:(1)统一由环境类来负责状态之间的转换,环境类充当了状态管理器(State Manager)角色 public void ChangeState()/判断属性值,根据属性值进行状态转换判断属性值,根据属性值进行状态转换if(value=0)this.SetState(new ConcreteStateA();else if(value=1)this.SetState(new ConcreteStateB();.第11页/共30页状态模式的结构与实现状态模式的实现状态转换的实现:(2)由具体状态类来负责状态之间的转换,可以在具体状态类的业务方法中判断环境类的某些

7、属性值,再根据情况为环境类设置新的状态对象,实现状态转换 public void ChangeState(Context ctx)/根据环境对象中的属性值进行状态转换根据环境对象中的属性值进行状态转换if(ctx.Value=1)ctx.SetState(new ConcreteStateB();else if(ctx.Value=2)ctx.SetState(new ConcreteStateC();.第12页/共30页状态模式的应用实例实例说明某软件公司要为一银行开发一套信用卡业务系统,银行账户(Account)是该系统的核心类之一,通过分析,该软件公司开发人员发现在系统中账户存在3种状态

8、,且在不同状态下账户存在不同的行为,具体说明如下:(1)如果账户中余额大于等于0,则账户的状态为正常状态(Normal State),此时用户既可以向该账户存款也可以从该账户取款;(2)如果账户中余额小于0,并且大于-2000,则账户的状态为透支状态(Overdraft State),此时用户既可以向该账户存款也可以从该账户取款,但需要按天计算利息;(3)如果账户中余额等于-2000,那么账户的状态为受限状态(Restricted State),此时用户只能向该账户存款,不能再从中取款,同时也将按天计算利息;(4)根据余额的不同,以上3种状态可发生相互转换。现使用状态模式设计并实现银行账户状态

9、的转换。第13页/共30页状态模式的应用实例实例分析与类图银行账户状态图第14页/共30页状态模式的应用实例实例分析与类图银行账户结构图第15页/共30页状态模式的应用实例实例代码(1)Account:银行账户,充当环境类(2)AccountState:账户状态类,充当抽象状态类(3)NormalState:正常状态类,充当具体状态类(4)OverdraftState:透支状态类,充当具体状态类(5)RestrictedState:受限状态类,充当具体状态类(6)Program:客户端测试类演示演示演示演示参考代码参考代码(DesignPatternStateSample)第16页/共30页状

10、态模式的应用实例结果及分析3次取款操作有不同的结果第17页/共30页共享状态动机在有些情况下,多个环境对象可能需要共享同一个状态如果希望在系统中实现多个环境对象共享一个或多个状态对象,那么需要将这些状态对象定义为环境类的静态成员对象第18页/共30页共享状态实例某系统要求两个开关对象要么都处于开的状态,要么都处于关的状态,在使用时它们的状态必须保持一致,开关可以由开转换到关,也可以由关转换到开。试使用状态模式来实现开关的设计。第19页/共30页共享状态结构开关及其状态设计结构图第20页/共30页共享状态实现开关类:Switch(环境类)抽象状态类:SwitchState打开状态类:OnStat

11、e(具体状态类)关闭状态类:OffState(具体状态类)客户端测试类:Program演示演示演示演示参考代码参考代码(DesignPatternSwitchStateSample)第21页/共30页使用环境类实现状态转换动机对于客户端而言,无须关心状态类,可以为环境类设置默认的状态类,将状态的转换工作交给环境类(或具体状态类)来完成,具体的转换细节对于客户端而言是透明的可以通过环境类来实现状态转换,环境类作为一个状态管理器,统一实现各种状态之间的转换操作第22页/共30页使用环境类实现状态转换实例现要开发一个屏幕放大镜工具,其具体功能描述如下:用户单击“放大镜”按钮之后屏幕将放大一倍,再单击

12、一次“放大镜”按钮屏幕再放大一倍,第三次单击该按钮后屏幕将还原到默认大小。试使用状态模式来设计该屏幕放大镜工具。第23页/共30页使用环境类实现状态转换结构屏幕放大镜工具结构图第24页/共30页使用环境类实现状态转换实现屏幕类:Screen(环境类)抽象状态类:ScreenState正常状态类:NormalState(具体状态类)二倍状态类:LargerState(具体状态类)四倍状态类:LargestState(具体状态类)客户端测试类:Program演示演示演示演示参考代码参考代码(DesignPatternScreenStateSample)第25页/共30页状态模式的优缺点与适用环境模

13、式优点封装了状态的转换规则,可以对状态转换代码进行集中管理,而不是分散在一个个业务方法中将所有与某个状态有关的行为放到一个类中,只需要注入一个不同的状态对象即可使环境对象拥有不同的行为允许状态转换逻辑与状态对象合成一体,而不是提供一个巨大的条件语句块,可以避免使用庞大的条件语句来将业务方法和状态转换代码交织在一起可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数第26页/共30页状态模式的优缺点与适用环境模式缺点会增加系统中类和对象的个数,导致系统运行开销增大结构与实现都较为复杂,如果使用不当将导致程序结构和代码混乱,增加系统设计的难度对开闭原则的支持并不太好,增加新的状态类需要修改负责状态转换的源代码,否则无法转换到新增状态;而且修改某个状态类的行为也需要修改对应类的源代码第27页/共30页状态模式的优缺点与适用环境模式适用环境对象的行为依赖于它的状态(例如某些属性值),状态的改变将导致行为的变化在代码中包含大量与对象状态有关的条件语句,这些条件语句的出现会导致代码的可维护性和灵活性变差,不能方便地增加和删除状态,并且导致客户类与类库之间的耦合增强第28页/共30页ENDENDENDEND第29页/共30页感谢您的观看!第30页/共30页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁