欠下的债总是要还的,状态机系列已经欠下了近十个月的债了,现在终于有时间来还债了。
上篇有限状态机实现-状态机介绍介绍了状态机的基本概念,不清楚的兄弟姐妹可以先回头看看。
按照之前的计划,整个状态机的实现将分为下面几个章节介绍
- 状态机介绍
- 简单有限状态机的实现
- 简单有限状态机实现(一)
- 简单有限状态机的应用实例
- 简单状态机功能增强
- 有限状态机状态持久化设计
- 有限状态机持久化实现
再述概念
下图为一个简单的状态机流转图,语言描述就是原始状态接收一个指定的时间,执行对应的行为,流转到下一个状态,所谓的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();
}
本节内容先写到这里,内容不多,也很基础,后面持续更新。