23 C#设计模式-状态模式.ppt
《23 C#设计模式-状态模式.ppt》由会员分享,可在线阅读,更多相关《23 C#设计模式-状态模式.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、www.ChinaSA.infoDDesign esign P Patternsatterns状态模式状态模式状态模式状态模式刘刘 伟伟(Sunny)weiliu_www.ChinaSA.info大纲w状态模式概述w状态模式的结构与实现w状态模式的应用实例w共享状态w使用环境类实现状态转换w状态模式的优缺点与适用环境www.ChinaSA.info状态模式概述wH2O的三种状态(未考虑临界点)www.ChinaSA.info状态模式概述w分析在软件系统中:在软件系统中:有些对象具有多种状态这些状态在某些情况下能够相互转换对象在不同的状态下将具有不同的行为复杂的复杂的条件判断语句条件判断语句来进
2、行状态的判断和转换操作来进行状态的判断和转换操作 导致代码的可维护性和灵活性下降导致代码的可维护性和灵活性下降 出现新的状态时,出现新的状态时,代码的扩展性很差,客户端代码也需要进行相应的修代码的扩展性很差,客户端代码也需要进行相应的修改,改,违背了开闭原则违背了开闭原则class TestXYZ int behaviour;/Getter and Setter .public void HandleAll()if(behaviour=0)/do something else if(behaviour=1)/do something else if(behaviour=2)/do someth
3、ing else if(behaviour=3)/do something .some more else if.www.ChinaSA.info状态模式概述w状态模式的定义对象行为型对象行为型模式模式状状态态模模式式:允许一个对象在其内内部部状状态态改改变变时时改改变变它它的的行行为为。对对象看起来似乎修改了它的象看起来似乎修改了它的类类。State Pattern:Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.w
4、ww.ChinaSA.info状态模式概述w状态模式的定义又名又名状态对象状态对象(Objects for States)用于解决系统中用于解决系统中复杂对象的状态转换以及不同状态下复杂对象的状态转换以及不同状态下行为的封装问题行为的封装问题将将一个对象的一个对象的状态从该对象中分离状态从该对象中分离出来,封装到专门出来,封装到专门的的状态类状态类中,使得对象状态可以灵活变化中,使得对象状态可以灵活变化对于对于客户端客户端而言,而言,无须关心对象状态的转换以及对象无须关心对象状态的转换以及对象所处的当前状态所处的当前状态,无论对于何种状态的对象,客户端,无论对于何种状态的对象,客户端都可以一致
5、处理都可以一致处理www.ChinaSA.info状态模式的结构与实现w状态模式的结构www.ChinaSA.info状态模式的结构与实现w状态模式的结构状态模式包含以下状态模式包含以下3个角色:个角色:Context(环境类)State(抽象状态类)ConcreteState(具体状态类)www.ChinaSA.info状态模式的结构与实现w状态模式的实现典型的抽象状态类代码:典型的抽象状态类代码:abstract class State /声明抽象业务方法,不同的具体状态类可以有不同的实现 public abstract void Handle();www.ChinaSA.info状态模式
6、的结构与实现w状态模式的实现典型的具体状态类代码:典型的具体状态类代码:class ConcreteState:State public override void Handle()/方法具体实现代码 www.ChinaSA.info状态模式的结构与实现w状态模式的实现典型的环境类代码:典型的环境类代码:class Context private State state;/维维持一个持一个对对抽象状抽象状态对态对象的引用象的引用 private int value;/其他属性其他属性值值,该该属性属性值值的的变变化可能会化可能会导导致致对对象状象状态发态发生生变变化化 /设置状态对象 publ
7、ic void SetState(State state)this.state=state;public void Request()/其他代其他代码码state.Handle();/调调用状用状态对态对象的象的业务业务方法方法/其他代其他代码码 www.ChinaSA.info状态模式的结构与实现w状态模式的实现状态转换的实现:状态转换的实现:(1)统一由环境类来负责状态之间的转换,环境类充当了状态管理器(State Manager)角色 public void ChangeState()/判断属性判断属性值值,根据属性,根据属性值进值进行状行状态转换态转换if(value=0)this.S
8、etState(new ConcreteStateA();else if(value=1)this.SetState(new ConcreteStateB();.www.ChinaSA.info状态模式的结构与实现w状态模式的实现状态转换的实现:状态转换的实现:(2)由具体状态类来负责状态之间的转换,可以在具体状态类的业务方法中判断环境类的某些属性值,再根据情况为环境类设置新的状态对象,实现状态转换 public void ChangeState(Context ctx)/根据根据环环境境对对象中的属性象中的属性值进值进行状行状态转换态转换if(ctx.Value=1)ctx.SetState
9、(new ConcreteStateB();else if(ctx.Value=2)ctx.SetState(new ConcreteStateC();.www.ChinaSA.info状态模式的应用实例w实例说明某软件公司要为一银行开发一套信用卡业务系统,银行账户(Account)是该系统的核心类之一,通过分析,该软件公司开发人员发现在系统中账户存在3种状态,且在不同状态下账户存在不同的行为,具体说明如下:(1)如果账户中余额大于等于0,则账户的状态为正常状态(Normal State),此时用户既可以向该账户存款也可以从该账户取款;(2)如果账户中余额小于0,并且大于-2000,则账户的状
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 23 C#设计模式-状态模式 C# 设计 模式 状态
限制150内