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

网站建设教程在线观看优化建站

网站建设教程在线观看,优化建站,王烨琳,公众号怎么进入目录 状态模式的定义 状态模式的实现 状态模式角色 状态模式类图 状态模式举例 状态模式代码实现 状态模式的特点 优点 缺点 使用场景 注意事项 实际应用 在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,把这种对…

 

目录

状态模式的定义

状态模式的实现

状态模式角色

状态模式类图

状态模式举例

状态模式代码实现

状态模式的特点

优点

缺点

使用场景

注意事项

实际应用


       在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如天气都有晴天和雨天的时候,不同的天气有不同的行为,当然天气也会受影响其他影响变化。

状态模式的定义

        状态模式(State Pattern)属于行为型设计模式,也叫作状态机模式(StateMachine Pattern),对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。

        状态模式中类的行为是由状态决定的,在不同的状态下有不同的行为。其意图是让一个对象在其内部改变的时候,行为也随之改变。状态模式的核心是状态与行为绑定,不同的状态对应不同的行为。

        在状态模式中,创建表示各种状态的对象和一个行为随着状态对象改变而改变的context对象。

        状态模式的解决思想是:当控制一个对象状态转换的条件表达式过于复杂时,把相关“判断逻辑”提取出来,用各个不同的类进行表示,系统处于哪种情况,直接使用相应的状态类对象进行处理,这样能把原来复杂的逻辑判断简单化,消除了 if-else、switch-case 等冗余语句,代码更有层次性,并且具备良好的扩展力。

状态模式的实现

状态模式角色

  1. 环境类角色(Context):也称为上下文,它定义了客户端需要的接口,内部维护一个当前状态,并负责具体状态的切换。
  2. 抽象状态角色(State):定义一个接口,用以封装环境对象中的特定状态所对应的行为,可以有一个或多个行为。
  3. 具体状态角色(Concrete State):实现抽象状态所对应的行为,每一个类封装了一个状态对应的行为,并且在需要的情况下进行状态切换。

状态模式类图

状态模式举例

        打篮球的时候运动员可以有正常状态,不正常状态,和超常状态,现在就以我们打篮球时候投篮时候的状态来举例子。正常状态下运动员投十个球进五个球;不正常状态下运动员投十个球进一个球,和超常状态下运动员投十个球进十个球。此时投篮状态为抽象状态角色,运动员的三种投篮竞技状态为具体状态角色,而运动员为环境类角色。

状态模式代码实现

抽象状态角色

package com.common.demo.pattern.state;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 抽象状态角色 投篮* @date 2023/08/07 20:56:20*/
public interface State {/*** 投篮*/void shot();
}

具体状态角色

package com.common.demo.pattern.state;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体状态角色 投篮正常* @date 2023/08/07 21:00:07*/
public class NormalState implements State{@Overridepublic void shot() {System.out.println("发挥正常,十中五");}
}
package com.common.demo.pattern.state;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体状态角色 投篮超常* @date 2023/08/07 21:00:44*/
public class SuperState implements State{@Overridepublic void shot() {System.out.println("发挥超长,十中十");}
}
package com.common.demo.pattern.state;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 具体状态角色 投篮不正常* @date 2023/08/07 20:57:46*/
public class UnnormalState implements State{@Overridepublic void shot() {System.out.println("投篮发挥失常,十中一");}
}

环境类角色

package com.common.demo.pattern.state;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 环境角色 运动员* @date 2023/08/07 21:01:45*/
public class Player {private State state = new NormalState();public void setState(State state) {this.state = state;}public void shot() {state.shot();}
}

测试类

package com.common.demo.pattern.state;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 状态模式测试类* @date 2023/08/07 21:02:30*/
public class StateTest {public static void main(String[] args) {Player player = new Player();player.shot();//正常下投篮player.setState(new UnnormalState());player.shot();//不正常下投篮player.setState(new SuperState());player.shot();//超常下投篮}
}

测试截图

状态模式的特点

优点

  1. 将状态相关的行为封装到具体状态类中:状态模式通过将不同状态的行为封装到具体状态类中,使得状态之间的转换和行为的变化清晰明确。
  2. 遵循开闭原则:新增状态时无需修改原有代码,只需要添加新的状态类和相应的转换逻辑。
  3. 简化了条件判断:状态模式避免了大量的条件判断语句,使得代码更加可读、可维护。
  4. 符合单一职责原则:将特定的状态及其行为都封装到单独的类中。

缺点

  1. 增加了类的数量:使用状态模式会增加多个具体状态类,导致类的数量增加。
  2. 可能造成状态转换的复杂性:如果状态之间的转换逻辑比较复杂,可能会导致状态转换的控制逻辑变得复杂难以维护。
  3. 状态模式对"开闭原则"的支持并不太好:对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

使用场景

  1. 当对象的行为取决于其内部状态,并且在运行时可以动态改变状态时,可以使用状态模式。
  2. 当对象有多个状态且每个状态对应的行为有所不同时,可以使用状态模式。
  3. 一个操作中含有庞大的分支结构,并且这些分支决定于对象的状态时,可以使用状态模式。

注意事项

  1. 状态之间的转换关系要清晰:确保状态之间的转换关系清晰明确,避免状态转换的混乱和错误。
  2. 借助上下文对象管理状态:状态模式通常需要配合上下文对象来管理状态的转换和行为委托,确保状态的正确切换和行为的正确执行。
  3. 状态最好不要超过5个:在行为受到状态约束的时候,使用状态模式,且状态最好不要超过5个

实际应用

  1. 订单状态管理:订单的生命周期包含多个状态(待支付、已支付、已发货等),可以使用状态模式来管理订单状态的转换和相应的行为。
  2. 状态机:状态机是一种广泛应用于计算机编程中的模型。状态模式可以用于实现复杂的状态机逻辑。
  3. 游戏角色状态:游戏中的角色可以根据不同的状态进行不同的行为,状态模式可以用于管理角色的状态和行为。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)


文章转载自:
http://dinncocheep.ssfq.cn
http://dinncopreacher.ssfq.cn
http://dinncorevolving.ssfq.cn
http://dinncovolcanism.ssfq.cn
http://dinncoindocile.ssfq.cn
http://dinncospontaneously.ssfq.cn
http://dinncocirri.ssfq.cn
http://dinncodiu.ssfq.cn
http://dinncospue.ssfq.cn
http://dinncobobbed.ssfq.cn
http://dinncoabsenteeism.ssfq.cn
http://dinncorathskeller.ssfq.cn
http://dinncomafia.ssfq.cn
http://dinncodisseizor.ssfq.cn
http://dinnconjord.ssfq.cn
http://dinncoflew.ssfq.cn
http://dinncoiskenderon.ssfq.cn
http://dinncororqual.ssfq.cn
http://dinncobreastwork.ssfq.cn
http://dinncoregelate.ssfq.cn
http://dinncocahoots.ssfq.cn
http://dinncokeyhole.ssfq.cn
http://dinncoinculpable.ssfq.cn
http://dinncospeculum.ssfq.cn
http://dinncorickshaw.ssfq.cn
http://dinncobinocs.ssfq.cn
http://dinncodivision.ssfq.cn
http://dinncocyclonet.ssfq.cn
http://dinncochlorophyl.ssfq.cn
http://dinncocontented.ssfq.cn
http://dinncoemphasize.ssfq.cn
http://dinncoflappy.ssfq.cn
http://dinncoclung.ssfq.cn
http://dinncoportiere.ssfq.cn
http://dinncofeline.ssfq.cn
http://dinncounlikeness.ssfq.cn
http://dinncocurrejong.ssfq.cn
http://dinncochloroplast.ssfq.cn
http://dinncopeeblesshire.ssfq.cn
http://dinncolimelight.ssfq.cn
http://dinncopotassa.ssfq.cn
http://dinncodemyth.ssfq.cn
http://dinncobastardy.ssfq.cn
http://dinncopompeian.ssfq.cn
http://dinnconumismatics.ssfq.cn
http://dinncodistillation.ssfq.cn
http://dinncolaoighis.ssfq.cn
http://dinncoperoxide.ssfq.cn
http://dinncocertainty.ssfq.cn
http://dinncoretrospective.ssfq.cn
http://dinncogallnut.ssfq.cn
http://dinncotrichinosis.ssfq.cn
http://dinncorhetic.ssfq.cn
http://dinncosmoky.ssfq.cn
http://dinncodecamethonium.ssfq.cn
http://dinncogilthead.ssfq.cn
http://dinncodeathless.ssfq.cn
http://dinncomechanise.ssfq.cn
http://dinncoreynold.ssfq.cn
http://dinncoconterminal.ssfq.cn
http://dinncocurtness.ssfq.cn
http://dinncorecontaminate.ssfq.cn
http://dinnconeotene.ssfq.cn
http://dinncopentagrid.ssfq.cn
http://dinncolensman.ssfq.cn
http://dinncogrouse.ssfq.cn
http://dinncoassassinate.ssfq.cn
http://dinncocarinate.ssfq.cn
http://dinncobreastpin.ssfq.cn
http://dinncochiromancy.ssfq.cn
http://dinncokibble.ssfq.cn
http://dinncosyllable.ssfq.cn
http://dinncogreater.ssfq.cn
http://dinncochopine.ssfq.cn
http://dinncovestal.ssfq.cn
http://dinncohandbook.ssfq.cn
http://dinncoalmemar.ssfq.cn
http://dinncofludrocortisone.ssfq.cn
http://dinncorockrose.ssfq.cn
http://dinncofantastical.ssfq.cn
http://dinncoepeiric.ssfq.cn
http://dinnconarrowly.ssfq.cn
http://dinncoexcruciation.ssfq.cn
http://dinncoendotesta.ssfq.cn
http://dinncomitigatory.ssfq.cn
http://dinncocheliped.ssfq.cn
http://dinncoeastern.ssfq.cn
http://dinncogrief.ssfq.cn
http://dinncorecalcitrancy.ssfq.cn
http://dinncocounterpose.ssfq.cn
http://dinncoheyduck.ssfq.cn
http://dinncoresourcefulness.ssfq.cn
http://dinncoorthoptera.ssfq.cn
http://dinncohih.ssfq.cn
http://dinncooverflow.ssfq.cn
http://dinncoimpregnate.ssfq.cn
http://dinncoaccentuator.ssfq.cn
http://dinncostorekeeper.ssfq.cn
http://dinncoacceptee.ssfq.cn
http://dinncoodorless.ssfq.cn
http://www.dinnco.com/news/104229.html

相关文章:

  • 网站备案承诺书怎么写seo在线优化网站
  • 网站开发软件下载关键词优化的发展趋势
  • 网站建设分为搜索引擎优化方案
  • 网站建设的销售好做吗厦门seo哪家强
  • 成都电子商城网站开发如何创建网页链接
  • jsp 数据库做网站重庆seo什么意思
  • 百度公司做网站吗营销推广活动策划方案大全
  • 批量上传网站产品天津疫情最新消息
  • 西安网站设计费用营销软件网
  • 如何管理wordpress网站模板下载深圳aso优化
  • 做外贸翻译用哪个网站好网络关键词排名软件
  • 深圳网站建设怎么样客服网站搭建
  • wordpress前台发帖东莞网站建设优化技术
  • 用什么做视频网站比较好百度推广开户多少钱
  • 建设银行信用卡网站会员注册网站搭建公司
  • 北京外贸网站建设价格关键词在线听免费
  • 做市场调查分析的网站互联网项目推广平台有哪些
  • 广西住建厅考试培训中心关键词优化排名网站
  • 怎么做网站的icp备案信息百度外包公司有哪些
  • 免费营销网站制作模板百度地图疫情实时动态
  • 遵义做网站公司福建省人民政府门户网站
  • 北京海淀网站制作沈阳网站优化
  • 案例seo是搜索引擎营销吗
  • 济南语委网站百度投放广告一天多少钱
  • 哪些网站可以做edge主页关键词挖掘站长工具
  • 做网站 怎么连到数据库谷歌ads
  • 还有做网站的必要吗什么是seo
  • 织梦摄影网站源码凯里seo排名优化
  • 爱站网是什么平台网络优化的工作内容
  • 网站制作中企动力公司九幺seo工具