美文网首页程序员
有限状态机实现-简单有限状态机实现(一)

有限状态机实现-简单有限状态机实现(一)

作者: iPolaris | 来源:发表于2017-12-03 21:47 被阅读445次

欠下的债总是要还的,状态机系列已经欠下了近十个月的债了,现在终于有时间来还债了。
上篇有限状态机实现-状态机介绍介绍了状态机的基本概念,不清楚的兄弟姐妹可以先回头看看。
按照之前的计划,整个状态机的实现将分为下面几个章节介绍

  • 状态机介绍
  • 简单有限状态机的实现
    • 简单有限状态机实现(一)
  • 简单有限状态机的应用实例
  • 简单状态机功能增强
  • 有限状态机状态持久化设计
  • 有限状态机持久化实现

再述概念

下图为一个简单的状态机流转图,语言描述就是原始状态接收一个指定的时间,执行对应的行为,流转到下一个状态,所谓的State,Trigger(Event),Action 在上一篇文件里已经有过详细的介绍,此文不在累述。


示例

基于上面的描述,我们要实现一个简单的状态机,所要干的几件事:

  • 定义State
  • 定义Event
  • 定义Action
  • 定义流转(Transition)
  • 上下文的传递 (上下文的传递在任何框架中都是绕不开的问题,所以此处也单独给出)
  • 流转控制
    本章围绕State,Event的定义展开,会尽量涵盖功能,但给出的定义并不代表最终版,因为有些概念是要和后面的内容串起来讲的。

State要干的那些事

State(状态)算是状态机中最简单的一个概念,实现起来也是最简的,因为状态本身不干什么事,State可以就简单的理解为一个标识,标识给一个Code或者ID就够了,不过如果想扩展是就是用户自己的行为,所以我们State是以接口形式提供的。

State实现代码

public interface State {
    /**
     * 状态码
     * @return
     */
    String getCode();
}

就是这么简单

Event干的那些事

状态机中的Event很多版本的状态机是叫做Trigger的,意为触发器,其实很形象,但是个人还是喜欢用Event,用意为事件驱动,Event是一个可以拓展的地方,自动触发,定时触发,延时触发,是否允许重试等,都可以在Event这个地方做拓展,不过我们第一步是定义一个简单版本的状态机,目前是先让一个状态机可以跑起来,拓展的内容我们放在增强版的。
事件也是需要有标识的,所以同样提供getCode的方法,另外我们在此先拓展一个自动触发的基础功能。

Event实现代码

public interface Event {
    /**
     * 事件码
     * @return
     */
    String getCode();

    /**
     * 是否自动触发
     * @return
     */
    boolean isAutoTrigger();
}

本节内容先写到这里,内容不多,也很基础,后面持续更新。

相关文章

网友评论

    本文标题:有限状态机实现-简单有限状态机实现(一)

    本文链接:https://www.haomeiwen.com/subject/yrmnbxtx.html