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

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

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

再述概念

下图为一个简单的状态机流转图,语言描述就是原始状态接收一个指定的时间,执行对应的行为,流转到下一个状态,所谓的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();
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 『代码github地址』 标签: 有限状态机,Akka fsm,squirrel-foundation,java状...
    醉叁重阅读 30,172评论 3 24
  • 这个系列最终实现的状态机并不是一个标准的状态机,把状态机的很多标准的概念进行了简化,对概念的东西做了减法,实现了具...
    iPolaris阅读 34,915评论 2 40
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,573评论 25 708
  • 状态机是无论科研探索还是科技应用方面都非常重要的一种分析工具。几乎在所有涉及到随时间演化的问题中,都可以找到状态机...
    Esmool阅读 4,525评论 0 26
  • 我在三天之内,阅读了十几万字。 这是截止凌晨2:30的浏览的记录。简书没有累计记载的,是当天记录的。我阅读的字数之...
    aabebw阅读 155评论 0 0