非常巧妙的一个使用枚举的例子.原文见
这里
interface Context {
ByteBuffer buffer();
State state();
void state(State state);
}
interface State {
/**
* @return true to keep processing, false to read more data.
*/
boolean process(Context context);
}
enum States implements State {
XML {
public boolean process(Context context) {
if (context.buffer().remaining() < 16) return false;
// read header
if(headerComplete)
context.state(States.ROOT);
return true;
}
}, ROOT {
public boolean process(Context context) {
if (context.buffer().remaining() < 8) return false;
// read root tag
if(rootComplete)
context.state(States.IN_ROOT);
return true;
}
}
}
public void process(Context context) {
socket.read(context.buffer());
while(context.state().process(context));
}
分享到:
相关推荐
主要介绍了Java如何通过枚举实现有限状态机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Main:启动类,实现状态机的流程控制及状态事件动作的定义 MyCondtion:自定义条件过滤器 MyEvent:自定义事件枚举列表 MyState:自定义状态枚举列表 MyStateMachine:状态机,根据需求实现AbstractStateMachine|...
EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 EnumPrintProcessors 枚举系统中可用的打印处理器 Escape 设备控制函数 FindClosePrinterChangeNotification 关闭用...
对于一个状态机的运行而言,这样的节省当然微乎其微,但假如你的系统同时运行成千上万个这种状态机时,那么就有必要考虑一下这种优化了。 (2)查表法 第(1)种方法再怎么优化,也需要枚举状态和消息,...
一种用于.NET的状态机,可轻松实现具有时序的可序列化,异步,分层状态机。 有很多.NET状态机,那么这个有什么不同? 首先,它是异步的,因此进入,退出或转换操作可以使用async await 。 其次,它是层次结构的,...
transitions在Python中具有许多扩展的轻量级,面向对象的状态机实现。 与Python 2.7+和3.0+兼容。 Installation pip install transitions ...或从G transitions复制存储库Python中的轻量级面向对象状态机实现,...
二进制和枚举包含了许多组合反馈逻辑,以实现当前状态到下一个状态的膨‘转。由于资源利用率高,因此比较适合CPLD的逻辑设计;而One ̄Hot计数器由于始终只有一位变化,组合反馈资源少,具有的速度和较强的抗干扰性能...
以下是一个简单的状态机,该状态机应该在任何Unity上下文中都能正常工作。 专为简单而设计 教科书状态机的实现以及其他C#状态机库的扩展趋向于复杂的配置或过多的样板。 但是,StateMachines非常有用-管理开销永远...
二进制和枚举包含了许多组合反馈逻辑,以实现当前状态到下一个状态的膨‘转。由于资源利用率高,因此比较适合CPLD的逻辑设计;而One ̄Hot计数器由于始终只有一位变化,组合反馈资源少,具有最高的速度和较强的抗干扰...
一种用于创建高度紧凑且轻巧的通用有限状态机的模式。 两种口味 该模式的两个示例实现已包括在内。 基本和最小。 基本实现既提供安全性又提供性能,而最小实现则以安全性和性能为代价降低了LoC。 设计 简洁是关键。 ...
一种用于创建高度紧凑且轻巧的通用有限状态机的模式。 两种口味 该模式的两个示例实现已包括在内。 基本和最小。 基本实现既提供安全性又提供性能,而最小实现则以安全性和性能为代价降低了LoC。 设计 简洁是关键。 ...
Labview应用技术 四则运算(课堂实训).docx 学习资料 复习资料 教学资源
1.枚举概述 2.枚举的常用方法 3.枚举的特性 ... 5.Switch状态机,组织枚举,策略枚举 6.EnumSet和EnumMap 原创文章 56获赞 82访问量 5515 关注 私信 展开阅读全文 作者:陌路逢君 唯图一笑
ignoreCase 属性 返回一个 Boolean 值,标记正则表达式使用的 ignoreCase 标志状态 (i)。 递增运算符(++) 给变量加一。 index 属性 返回在字符串中找到的第一个成功匹配的字符位置。 indexOf 方法 返回在 ...
Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应...
USB 状态机,用 C 语言编写,控制设备枚举过程,模拟端点...... 原作者(俄罗斯人)没有在 Rx 代码中正确实现位去填充。我提出了两种方法来解决这个问题: 保持 12MHz 晶振,从 USB Host 接收原始数据,然后再进行 ...
ignoreCase 属性 返回一个 Boolean 值,标记正则表达式使用的 ignoreCase 标志状态 (i)。 递增运算符(++) 给变量加一。 index 属性 返回在字符串中找到的第一个成功匹配的字符位置。 indexOf 方法 返回在 ...
ignoreCase 属性 返回一个 Boolean 值,标记正则表达式使用的 ignoreCase 标志状态 (i)。 递增运算符(++) 给变量加一。 index 属性 返回在字符串中找到的第一个成功匹配的字符位置。 indexOf 方法 返回在 ...
通常为该状态机设置一个枚举(表示其可能的状态)和一个枚举(表示其动作)。 机器的状态确定是否允许运行某个动作。 机器的状态只能通过操作来更改。 动作处理程序返回计算机的新状态。 还可以注册在某些状态发生...
FileList.java 自己实现的一个文件名称枚举类 MyDataIO.java 数据输入输出示例 MyFileOutput.java 将键盘读入的文字保存到文件 MyPipedIO.java 管道流示例 MySequenceIn.java 顺序输入流示例 ObjectFileTest....