当前位置: 首页 > news >正文

建邺网站建设嘉兴网站制作星讯网络科技

建邺网站建设,嘉兴网站制作星讯网络科技,小说网站怎么做不违法,设计制作小车二教学设计1、简介 1.1、概述 在软件系统中#xff0c;有些对象也像水一样具有多种状态#xff0c;这些状态在某些情况下能够相互转换#xff0c;而且对象在不同的状态下也将具有不同的行为。为了更好地对这些具有多种状态的对象进行设计#xff0c;可以使用一种被称为状态模式的设…1、简介 1.1、概述 在软件系统中有些对象也像水一样具有多种状态这些状态在某些情况下能够相互转换而且对象在不同的状态下也将具有不同的行为。为了更好地对这些具有多种状态的对象进行设计可以使用一种被称为状态模式的设计模式。 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态这些状态之间可以进行转换而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来封装到专门的状态类中使得对象状态可以灵活变化。对于客户端而言无须关心对象状态的转换以及对象所处的当前状态无论对于何种状态的对象客户端都可以一致性地处理。 1.2、定义 状态模式State Pattern允许一个对象在其内部状态改变时改变它的行为对象看起来似乎修改了它的类。其别名为状态对象Objects for States状态模式是一种对象行为型模式。 2、解析 2.1、UML类图 在状态模式中引入了抽象状态类和具体状态类它们是状态模式的核心其结构如下图所示。 可以看出在状态模式结构图中包含以下3个角色 Context环境类环境类又称为上下文类它是拥有多种状态的对象。由于环境类的状态存在多样性且在不同状态下对象的行为有所不同因此将状态独立出去形成单独的状态类。在环境类中维护一个抽象状态类State的实例这个实例定义当前状态在具体实现时它是一个State子类的对象。State抽象状态类它用于定义一个接口以封装与环境类的一个特定状态相关的行为。在抽象状态类中声明各种不同状态对应的方法而在其子类中实现这些方法。由于不同状态下对象的行为可能不同因此在不同子类中方法的实现可能存在不同相同的方法可以写在抽象状态类中。ConcreteState具体状态类它是抽象状态类的子类每个子类实现一个与环境类的一个状态相关的行为。每个具体状态类对应环境类的一个具体状态不同的具体状态类其行为有所不同。 2.2、代码示例 在状态模式中将对象在不同状态下的行为封装到不同的状态类中。为了让系统具有更好的灵活性和可扩展性同时对各状态下的共有行为进行封装需要对状态进行抽象引入了抽象状态类角色其典型代码如下 /*** Description: 抽象状态* Author: yangyongbing* CreateTime: 2023/08/03* Version: 1.0*/ abstract class State {// 声明抽象业务方法不同的具体状态类可以有不同的方法实现public abstract void handle(); } 在抽象状态类的子类即具体状态类中实现了在抽象状态类中声明的业务方法不同的具体状态类可以提供完全不同的方法实现。在实际使用时一个状态类中可能包含多个业务方法。如果在具体状态类中某些业务方法的实现完全相同可以将这些方法移至抽象状态类实现代码的复用。典型的具体状态类代码如下 /*** Description: 具体状态* Author: yangyongbing* CreateTime: 2023/08/03 19:45* Version: 1.0*/ public class ConcreteState extends State{Overridepublic void handle() {// 方法具体实现} }环境类维持一个对抽象状态类的引用。通过setState方法可以向环境类注入不同的状态对象再在环境类的业务方法中调用状态对象的方法典型代码如下 /*** Description: 环境类* Author: yangyongbing* CreateTime: 2023/08/03 19:46* Version: 1.0*/ public class Context {// 持有一个对抽象状态对象的引用private State state;// 其它属性值该属性值的变化可能会导致对象状态发生变化private int value;// 设置状态对象public void setState(State state) {this.state state;}public void request(){// 其它代码state.handle(); // 调用状态对象的业务方法// 其他代码} }环境类实际上是真正拥有状态的对象这里只是将环境类中与状态有关的代码提取出来封装到专门的状态类中。 在状态模式的使用过程中一个对象的状态之间还可以进行相互转换。通常有以下两种实现状态转换的方式 统一由环境类来负责状态之间的转换。此时环境类还充当了状态管理器State Manager角色。在环境类的业务方法中通过对某些属性值的判断实现状态转换还可以提供一个专门的方法用于实现属性判断和状态转换。代码片段如下 public void changeState(){// 判断属性值根据属性值进行状态转换if(value0){this.setState(new ConcreteStateA());}else if(value1){this.setState(new ConcreteStateB());} }由具体状态类来负责状态之间的转换。可以在具体状态类的业务方法中判断环境类的某些属性值再根据情况为环境类设置新的状态对象实现状态转换。同样也可以提供一个专门的方法来负责属性值的判断和状态转换。此时状态类与环境类之间将存在依赖或关联关系因为状态类需要访问环境类中的属性值。代码片段如下 public void changeState(Context ctx){// 判断属性值根据属性值进行状态转换if(ctx.getValue()1){this.setState(new ConcreteStateB());}else if(ctx.getValue()2){this.setState(new ConcreteStateC());} }2.3、共享状态 在有些情况下多个环境对象可能需要共享同一个状态。如果希望在系统中实现多个环境对象共享一个或多个状态对象那么需要将这些状态对象定义为环境类的静态成员对象。 下面通过一个简单实例来说明如何实现共享状态。如果某系统要求两个开关对象要么都处于开的状态要么都处于关的状态在使用时它们的状态必须保持一致。开关可以由开转换到关也可以由关转换到开。 可以使用状态模式来实现开关的设计其结构如下图所示 3、状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中。通过设置不同的状态对象可以让环境对象拥有不同的行为而状态转换的细节对于客户端而言是透明的方便了客户端的使用。在实际开发中状态模式具有较高的使用频率在工作流、游戏等软件中状态模式都得到了广泛应用例如公文状态的转换、游戏中角色的升级等。 3.1、主要优点 封装了状态的转换规则。在状态模式中可以将状态的转换代码封装在环境类或者具体状态类中对状态转换代码进行集中管理而不是分散在一个个业务方法中。将所有与某个状态有关的行为放到一个类中只需要注入一个不同的状态对象即可使环境对象拥有不同的行为。允许状态转换逻辑与状态对象合成一体而不是提供一个巨大的条件语句块。状态模式可以避免使用庞大的条件语句来将业务方法和状态转换代码交织在一起。可以让多个环境对象共享一个状态对象从而减少系统中对象的个数。 3.2、主要缺点 状态模式的使用必然会增加系统中类和对象的个数导致系统运行开销增大。状态模式的程序结构与实现都较为复杂如果使用不当将导致程序结构和代码的混乱增加系统设计的难度。状态模式对开闭原则的支持并不太好。增加新的状态类需要修改那些负责状态转换的源代码否则无法转换到新增状态而且修改某个状态类的行为也需修改对应类的源代码。 3.3、使用场景 对象的行为依赖于它的状态例如某些属性值状态的改变将导致行为的变化。在代码中包含大量与对象状态有关的条件语句。这些条件语句的出现会导致代码的可维护性和灵活性变差不能方便地增加和删除状态并且导致客户类与类库之间的耦合增强。
http://www.hkea.cn/news/14362733/

相关文章:

  • 品牌创意型网站开发宜昌永东建设网站
  • o2o网站建设行情怎么学做电商
  • 数据查询网站建设江苏网站建设电话
  • html5网站动效怎么做苏州知名网站建设
  • 东营市建设局网站建设网站用户名是什么
  • 安徽城乡建设厅官方网站百度智能云官网
  • php网站建设管理教材wordpress能做手机站吗
  • 学校网站设计制作目的搜索推广平台
  • 免费做简历的软件网站门户网站建设资质
  • 网站开发价格多少什么是外包公司?
  • 电子商务网站建设的目标是什么意思黄页网站推广
  • 个人网站备案备注写什么wordpress回复显示插件
  • 磨床 东莞网站建设免费公众号排版编辑器
  • 制作图片的免费网站尚海整装电话号码
  • 男女激烈做羞羞事网站网站韩剧爱站工具包
  • 注册进出口贸易公司条件网站换域名seo怎么做
  • 网站建设与管理课后总结网站运营分析
  • 热度网络网站建设上海快速建站平台
  • 网站开发背景怎么写车间生产管理软件
  • 建设工程信息化考试报名网站如何推广外贸型网站
  • 中山蓝图科技网站建设新闻头条今天最新消息
  • 国外做的比较好的网站用二级域名做网站群
  • 网站建设宗旨怎么写最完整的外贸流程图
  • 推荐家居企业网站建设vue做网站前端
  • steam官方网站下载五屏网站建设哪家有
  • 网站首页轮播图片十大经典事件营销案例
  • 仿照别人的网站做违法吗asp网站缺点
  • 网店运营推广网站珠海正规网站制作哪家强
  • 化妆品应如何网站建设定位wordpress自动发货
  • 郑州做网站制作的公司响应 网站建设