标签: 有限状态机,Akka fsm,squirrel-foundation,java状态模式、责任链模式

1. 有限状态机的概念

有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

通常FSM包含几个要素:状态的管理、状态的监控、状态的触发、状态触发后引发的动作。

这些关系的意思可以这样理解:

State(S) x Event(E) -> Actions (A), State(S’)

如果我们当前处于状态S,发生了E事件, 我们应执行操作A,然后将状态转换为S’

下面展示最常见的表示:当前状态(B)和条件(Y)的组合指示出下一个状态(C)。完整的动作信息可以只使用脚注来增加。包括完整动作信息的FSM定义可以使用状态表。

条件↓当前状态→

状态A

状态B

状态C

条件X

条件Y

状态C

条件Z

2. 使用状态机的应用背景

在广告投放项目中由于复杂的广告投放逻辑,存在着大量的if-else 判断类似的硬编码,希望能借助对fsm模型的调研,找出理想的实现方式。

3.有限状态机的几种实现

3.1枚举类实现java状态模式

首先在枚举类中 定义state 和定义的抽象方法。

public enum JavaPlatformState {

有限状态自动机java实现_有限状态机FSM的几种简单实现相关推荐

  1. 有限状态自动机java实现_用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机...

    阅读博客的朋友可以到我的网易云课堂中,通过视频的方式查看代码的调试和执行过程: 上一节,我们通过代码,实现了一个有限状态自动机,并将其应用于对整形和浮点数的识别.构造有限状态自动机,并驱动它,从而实现 ...

  2. 反转字符串java实现_反转字符串的几种实现(Java)

    反转字符串的几种实现(Java) 首先第一种是利用Java中的类库对象进行反转 //第一种 使用Java类库的diam实现反转 public String reverse(String str){ S ...

  3. java读取excel并替换占位符_正则表达式 – 有没有一种简单的方法来替换Excel中的占位符?...

    没有完全测试,但这样的帮助?选择具有公式的单个单元格并运行Sample.我没有做任何错误处理.我假设ActiveCell将有一个公式.我也会按照你在上面的评论中说的那样,你的公式将没有命名范围 Dim ...

  4. cmd写java程序_用cmd写一个最简单的Java程序

    一,准备: 1.确保电脑中装有eclipse软件并且确保配置好环境变量 (1)环境变量配置方法: 特别提示:jdk和eclipse保存的路径不能有中文字符 1.打开我的电脑--属性--高级--环境变量 ...

  5. java分布式_分布式锁的四种JAVA实现方式

    前言 作为这一段时间学习分布式锁的总结,本文总结了四种Java分布式锁的实现方式,简单编写了代码,进行模拟实现.相关代码存放在我的github仓库. 为什么要用锁 系统内,有多个消费者,需要对同一共享 ...

  6. java 魔法值_可别在代码种写那么多魔法值了!

    1.前语 重构老代码中遇到了不少相似下面这种写法: publicvoidattend(Stringvalue){if("0".equals(value)){//todo}elsei ...

  7. excel转java 常量_【转】八种常见Excel错误提示及解决方法

    Excel经常会显一些错误值信息,如#N/A!.#VALUE!.#DIV/O!等等.出现这些错误的原因有很多种,最主要是由于公式不能计算正确结果.例如,在需要数字的公式中使用文本.删除了被公式引用的单 ...

  8. Java中的XSL转换:一种简单的方法

    XSL转换 (XSLT)是将一个XML文档转换为另一个XML文档的强大机制. 但是,在Java中,XML操作相当冗长和复杂. 即使是简单的XSL转换,也必须编写几十行代码-如果需要适当的异常处理和日志 ...

  9. C语言、Java学习笔记(三)---几种简单的排序算法

    假期已经过了一半,整个人都变得颓废了许多.今天没有出去玩,就学了几个简单的排序算法,以求安慰自己,好歹也是在假期里学习过了.(瘫- C 这里一次性给出三种排序方法的代码,分别是冒泡排序,选择排序和归并 ...

最新文章

  1. 想学Python?快看看这个教程!收藏!
  2. Python最抢手、Go最有前途,7000位程序员揭秘2019软件开发现状
  3. 老男孩教育Python 9期第一课练习题答案
  4. 有限状态机(使用状态模式C++实现)
  5. 为什么本地图片都不能直接浏览器_微软工程师帮助谷歌解决Chromium浏览器中一个很长久的细节问题...
  6. 机器学习——人工神经网络之多层神经网络(多层与三层)
  7. C语言——判断是该年的第几天
  8. 简约好看的响应式app下载页面源码
  9. Java架构师面试问些什么?微服务之springcloud面试题(共22题,含详细解答)
  10. java 利用同步工具类控制线程
  11. ios-绘制-小知识点(裁减)
  12. SQL从入门到不是怎么精通
  13. 错误: 找不到或无法加载主类 Demo
  14. 程序员转行做运营,曾被逼得每天想离职,最后...
  15. xshell 导入.xsh 文件
  16. xshell中文免费下载及安装 (内附xshell下载链接以及安装步骤)
  17. 如何购买ssl证书?
  18. [转]在.NET CF2.0中调用DirectShow来处理视音频数据
  19. Spring Boot多模块包扫描问题
  20. Linux 基于FTP协议文件传输系统

热门文章

  1. SpringBoot + Excel 读写技术与实际问题解决
  2. arm64 blr指令
  3. 【C/C++】printf格式化输出-科学计数法形式的浮点数
  4. [SEO名词]SEO是什么意思,如何理解?
  5. pycharm debug 提示 Python Debugger Extension Available Cython extension speeds up Python debugging
  6. 初学GWT-安装GWT
  7. #神仙见了会流泪之#getElementsByTagName的用法
  8. 我的团队人物介绍卡片布局
  9. 2021-07-08~2021-07-22总结--zhengjun
  10. RocketMQ可视化界面搭建