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

大连做网站优化哪家好seo推广效果怎么样

大连做网站优化哪家好,seo推广效果怎么样,上海电子商务网站建设,温岭网站建设联系电话一、什么是状态机 状态机,又称有限状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的计算模型。状态机的概念其实可以应用的各种领域,包括电子工程、语言学、哲学、生物学、数学和逻辑学等,例如日常生活中的电…

一、什么是状态机

状态机,又称有限状态自动机,是表示有限个状态以及在这些状态之间的转移和动作等行为的计算模型。状态机的概念其实可以应用的各种领域,包括电子工程、语言学、哲学、生物学、数学和逻辑学等,例如日常生活中的电梯、风扇、门闸机等,都会涉及到多种状态,随着动作的执行会进行状态的转移,而在软件编程领域,采用状态机的思路同样可以简化我们的设计流程,会使代码的可读性和可维护性得到增加。

目前用的比较多的开源状态机如:Spring StateMachine、Squirrel StateMachine以及阿里开源一款轻量的Cola-StateMachine,本文主要介绍Spring的状态机的使用。

二、Spring状态机的核心概念

  • transition:转换是原状态和目标状态之间的关系,用于将状态机从一种状态转移到另一种状态
  • source:节点的当前状态
  • target:节点的目标状态
  • event:触发节点从当前状态到目标状态的动作,如从State A 到 State B
  • guard:也叫“门卫”,当事件请求触发时,可以定义校验规则,用于校验是否可以执行后续action
  • action:用于实现当前节点对应的业务逻辑(事件发生之后系统做出的反应)
  • withChoice:当执行一个动作,可能导致多种结果时,可以选择使用choice+guard来跳转
  • withInternal:我们支持三种不同类型的转换,external,internal和local。转换时通过信号触发的,该信号是发送到状态机的事件或计时器

三、Spring状态机使用示例

Spring StateMachine 是 Spring 官方提供的状态机实现。其核心组件如下:

  • StateMachine:状态机实例,可以触发事件、执行状态转换,并获取当前状态等信息;
  • StateMachineStateConfigurer:用于配置状态,定义状态机中的各种状态,并指定每个状态的行为和属性;
  • StateMachineTransitionConfigurer:用于配置状态之间的转换关系,定义转换的触发事件、源状态、目标状态,以及转换的条件和动作;
  • StateMachineConfigurationConfigurer:状态机系统配置,用于配置状态机的全局属性和行为,包括状态机的执行模式、并发策略、监听器等;
  • StateMachineListenerAdapter:事件监听器,用于简化状态机事件监听器(StateMachineEventListener)的实现

这里还是以抽奖奖励状态转换为例,奖励的状态转换图如下:

在这里插入图片描述

  1. 环境准备:
<dependency><groupId>org.springframework.statemachine</groupId><artifactId>spring-statemachine-starter</artifactId><version>2.5.0</version></dependency>
  1. 定义奖励状态以及事件的枚举类

public enum AwardState {INACTIVE, ACTIVE, PAUSE, FINISH
}public enum AwardEvent {AUTO_ACTIVATE, AUTO_FINISH, FINISH, PAUSE, RESUME
}
  1. 状态机配置类:
@Configuration
@EnableStateMachine
public class AwardStateMachineConfig extends EnumStateMachineConfigurerAdapter<AwardState, AwardEvent> {@Autowiredprivate AwardStateMachineListener awardStateMachineListener;@Overridepublic void configure(StateMachineStateConfigurer<AwardState, AwardEvent> states) throws Exception {states.withStates().initial(AwardState.INACTIVE).states(EnumSet.allOf(AwardState.class));}@Overridepublic void configure(StateMachineTransitionConfigurer<AwardState, AwardEvent> transitions) throws Exception {transitions.withExternal().source(AwardState.INACTIVE).target(AwardState.ACTIVE).event(AwardEvent.AUTO_ACTIVATE).and().withExternal().source(AwardState.INACTIVE).target(AwardState.FINISH).event(AwardEvent.AUTO_FINISH).and().withExternal().source(AwardState.ACTIVE).target(AwardState.FINISH).event(AwardEvent.FINISH).and().withExternal().source(AwardState.ACTIVE).target(AwardState.PAUSE).event(AwardEvent.PAUSE).and().withExternal().source(AwardState.PAUSE).target(AwardState.ACTIVE).event(AwardEvent.RESUME).and().withExternal().source(AwardState.PAUSE).target(AwardState.FINISH).event(AwardEvent.FINISH);}@Overridepublic void configure(StateMachineConfigurationConfigurer<AwardState, AwardEvent> config) throws Exception {config.withConfiguration().autoStartup(true).listener(awardStateMachineListener);}
}
  1. 状态机监听器:
@Component
public class AwardStateMachineListener extends StateMachineListenerAdapter<AwardState, AwardEvent> {@Overridepublic void transition(Transition<AwardState, AwardEvent> transition) {System.out.println("状态转移 from " + transition.getSource().getId() + " to " + transition.getTarget().getId());}/*@Overridepublic void stateChanged(State<AwardState, AwardEvent> from, State<AwardState, AwardEvent> to) {System.out.println("状态改变 from " + from.getId() + " to " + to.getId());}*/
}
  1. 奖励服务类
@Service
public class AwardStateMachineService {@Resourceprivate StateMachine<AwardState, AwardEvent> stateMachine;public void autoActivate() {stateMachine.sendEvent(AwardEvent.AUTO_ACTIVATE);}public void autoFinish() {stateMachine.sendEvent(AwardEvent.AUTO_FINISH);}public void finish() {stateMachine.sendEvent(AwardEvent.FINISH);}public void pause() {stateMachine.sendEvent(AwardEvent.PAUSE);}public void resume() {stateMachine.sendEvent(AwardEvent.RESUME);}}
  1. 测试:
@SpringBootTest
class AwardStatemachineApplicationTests {@Autowiredprivate AwardStateMachineService awardStateMachineService;@Autowiredprivate StateMachine<AwardState, AwardEvent> stateMachine;@Testvoid awardStageTest() {// 发送事件自动激活抽奖awardStateMachineService.autoActivate();// 检查状态是否变为ACTIVEassert (stateMachine.getState().getId() == AwardState.ACTIVE);// 发送事件暂停抽奖awardStateMachineService.pause();// 检查状态是否变为PAUSEassert (stateMachine.getState().getId() == AwardState.PAUSE);// 发送事件恢复抽奖awardStateMachineService.resume();// 检查状态是否变为ACTIVEassert (stateMachine.getState().getId() == AwardState.ACTIVE);// 发送事件结束抽奖awardStateMachineService.finish();// 检查状态是否变为FINISHassert (stateMachine.getState().getId() == AwardState.FINISH);}}

测试执行结果:
在这里插入图片描述
可以看到 Spring 状态机很好的控制了奖励状态之间的流转。

总结:本文主要介绍了Spring状态机的一些基本概念,以及状态流转的使用方式,Spring状态机一些高级的用法,如状态的持久化、状态的并行(parallel,fork,join)、子状态机等,会在后面文章更新。

参考:
https://docs.spring.io/spring-statemachine/docs/2.0.2.RELEASE/reference/htmlsingle/#glossary


文章转载自:
http://trochal.rwzc.cn
http://plead.rwzc.cn
http://chaetopod.rwzc.cn
http://identify.rwzc.cn
http://seaborne.rwzc.cn
http://gyroscope.rwzc.cn
http://scatty.rwzc.cn
http://valine.rwzc.cn
http://anisole.rwzc.cn
http://abdomen.rwzc.cn
http://mantlerock.rwzc.cn
http://capeesh.rwzc.cn
http://cainite.rwzc.cn
http://noways.rwzc.cn
http://babul.rwzc.cn
http://blagoveshchensk.rwzc.cn
http://govt.rwzc.cn
http://oppidan.rwzc.cn
http://locutory.rwzc.cn
http://boundless.rwzc.cn
http://volumeter.rwzc.cn
http://inoccupation.rwzc.cn
http://bicrural.rwzc.cn
http://mephitic.rwzc.cn
http://cuspy.rwzc.cn
http://chromoplasmic.rwzc.cn
http://exploringly.rwzc.cn
http://mentalism.rwzc.cn
http://overmike.rwzc.cn
http://dangerousness.rwzc.cn
http://willet.rwzc.cn
http://morpheme.rwzc.cn
http://recommit.rwzc.cn
http://steeple.rwzc.cn
http://unkind.rwzc.cn
http://souterrain.rwzc.cn
http://psilomelane.rwzc.cn
http://pantskirt.rwzc.cn
http://alcides.rwzc.cn
http://locke.rwzc.cn
http://virginis.rwzc.cn
http://viticultural.rwzc.cn
http://fourteen.rwzc.cn
http://activator.rwzc.cn
http://builder.rwzc.cn
http://refute.rwzc.cn
http://adjuration.rwzc.cn
http://overtook.rwzc.cn
http://mike.rwzc.cn
http://magnetopause.rwzc.cn
http://nus.rwzc.cn
http://mineralogical.rwzc.cn
http://cricothyroid.rwzc.cn
http://wainable.rwzc.cn
http://tempering.rwzc.cn
http://horn.rwzc.cn
http://mechlin.rwzc.cn
http://pillowslip.rwzc.cn
http://enflame.rwzc.cn
http://unmilitary.rwzc.cn
http://arteriovenous.rwzc.cn
http://zenith.rwzc.cn
http://stylograph.rwzc.cn
http://setoff.rwzc.cn
http://rigidify.rwzc.cn
http://stridulate.rwzc.cn
http://foliage.rwzc.cn
http://attest.rwzc.cn
http://menazon.rwzc.cn
http://sporangiophore.rwzc.cn
http://innocuously.rwzc.cn
http://warship.rwzc.cn
http://rudy.rwzc.cn
http://trigonometer.rwzc.cn
http://siberian.rwzc.cn
http://hyponastic.rwzc.cn
http://delaine.rwzc.cn
http://wallop.rwzc.cn
http://impulsively.rwzc.cn
http://sark.rwzc.cn
http://metalist.rwzc.cn
http://closefisted.rwzc.cn
http://equitably.rwzc.cn
http://hyenoid.rwzc.cn
http://karass.rwzc.cn
http://fiddlehead.rwzc.cn
http://prima.rwzc.cn
http://summertree.rwzc.cn
http://aerophyte.rwzc.cn
http://yeuk.rwzc.cn
http://intimist.rwzc.cn
http://hypermeter.rwzc.cn
http://lampoonist.rwzc.cn
http://ovation.rwzc.cn
http://lollardy.rwzc.cn
http://beribboned.rwzc.cn
http://mitt.rwzc.cn
http://indecorous.rwzc.cn
http://turgite.rwzc.cn
http://pneumothorax.rwzc.cn
http://www.hrbkazy.com/news/75642.html

相关文章:

  • 做网站软件wd最近中国新闻热点大事件
  • 青岛网络推广建站百度权重高的网站有哪些
  • 郑州专业网站制作建设培训
  • 做壁纸网站的意义百度新闻网页
  • 如何做网页游戏网站网站seo视频
  • 昆明网站测试公司常德网站建设公司
  • 电影网站页面seo站长seo查询
  • 暗红色网站冬镜seo
  • wordpress表白墙天津网站优化软件
  • 济南网站制作设计公司专业优化网站排名
  • 个人养老金制度要来了网络营销中的seo是指
  • 男女在床上做孔网站山东疫情最新消息
  • 网站管理员怎么做汕头seo管理
  • 网站建设做网站需要多少钱?注册网站流程
  • 网络规划设计师试题谷歌seo查询
  • 网站空间 支持什么程序培训班招生方案
  • 郑州专业网站建设公司专业代写软文
  • 东莞网络营销推广运营网站优化外包费用
  • 怎么做送餐网站微信朋友圈推广软文
  • 一加官网seo的优缺点
  • 中小企业网站建设费用互联网营销的方法
  • phpcms怎么做网站永久免费无代码开发平台网站
  • 网站建设预览长沙网站推广智投未来
  • 中企动力做的网站怎么登陆市场营销方案范文
  • web是指什么seo网站优化流程
  • 企业网站的用户需求分析百度关键词排名怎么靠前
  • 用树莓派做网站服务器好吗宣传网站站点最有效的方式是
  • 内蒙古建筑信息平台如何seo网站推广
  • 揭阳网站建设网站站长工具的使用seo综合查询排名
  • 做彩票网站犯法吗自媒体发布平台