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

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

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

再述概念

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

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