`

使用枚举实现一个状态机

    博客分类:
  • Java
阅读更多
非常巧妙的一个使用枚举的例子.原文见这里
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枚举状态机

    在Java中,通过枚举可以更安全、更易于理解和维护地实现状态机。 首先,让我们理解什么是枚举。在Java中,枚举是一种特殊的类,用于定义一组预定义的常量。这些常量代表特定的值,通常表示某种固定的集合,如颜色、...

    一个有趣的有限状态机的JAVA实现

    在Java中实现有限状态机,我们通常会定义一个枚举类来表示状态,一个类来表示状态机,以及一系列方法来处理状态间的转换。例如,我们可以创建一个`State`枚举,包含“打开冰箱”、“放入大象”和“关闭冰箱”等状态...

    StateMachine 状态机机制深入解析

    状态指的是系统当前的状态,事件指的是触发状态迁移的事件,状态迁移指的是从一个状态到另一个状态的转换。 在 Spring StateMachine 中,状态和事件可以使用枚举类型来定义。例如,在用户注册的示例中,我们可以...

    Java如何通过枚举实现有限状态机

    Java如何通过枚举实现有限状态机 Java中的枚举类型是一种特殊的类类型,它可以实现有限状态机。有限状态机是一种数学模型,用于描述一个系统在不同的状态下可以执行的动作和切换规则。 Java中的枚举类型可以很好地...

    labview状态机的实现

    5. 实现状态机:删除模版中的介绍性文字,然后将严格自定义类型的枚举控件拖入程序框图中,获得它所对应的常量,用来替换原模版中的枚举类型常量。在条件结构中加入足够的分支来放置不同状态下的代码;添加足够的...

    LabVIEW状态机小灯按顺序点亮条件结构+自定义枚举

    在LabVIEW中,我们可以通过创建一个流程图(GDI)来实现状态机,每个状态对应流程图中的一个节点,而状态之间的转换则通过连接线来表示。 1. **自定义枚举**: 在LabVIEW中,自定义枚举是一种数据类型,它允许我们...

    状态机知识 状态机c语言实现

    下面将详细介绍如何在C语言中实现状态机,并给出一个具体的例子。 ### C语言实现状态机的具体步骤 #### 步骤1:定义状态机的结构 首先,我们需要定义状态机的基本结构,包括所有可能的状态、起始状态以及状态转换...

    C语言编写的状态机源代码,包括四种典型实现方式

    通过定义一个枚举类型表示所有可能的状态,然后在一个无限循环中使用switch-case语句处理每个状态的转换。例如,在`bomb1.c`和`bomb2.c`中可能就采用了这种方法。 2. **状态表驱动**: `statetbl.c`和`statetbl.h`...

    C语言高效有限状态机(FSM)详细设计说明书.docx

    程序描述章节,会进一步介绍C语言实现的状态机的细节,如数据类型的定义(如枚举和结构体)、主要功能(如状态转换逻辑)、状态机的构建方法(如状态机图的映射),以及示例代码来展示实际操作流程。 在示例DEMO中...

    VHDL——有限状态机

    3. **高级特性运用**:在更高级别的设计中,可以考虑使用多个并行运行的状态机或者在一个结构体中包含多个状态机,以实现更复杂的功能。这种方式能够进一步提高系统的并行性和响应速度。 综上所述,有限状态机是...

    C语言嵌入式状态机架构(含C源码)

    在C语言中,实现状态机通常采用函数指针的方式。这是因为函数指针可以被视为指向执行特定任务的代码的指针,使得我们可以在运行时动态地调用不同的函数,对应于不同的状态行为。以下是一个简单的步骤,展示了如何...

    quartus 状态机

    在Verilog这种硬件描述语言中,我们可以方便地定义和实现状态机。 一、状态机的基本概念 状态机由一组状态和一系列的转移条件构成。每个状态代表系统的一个特定行为或阶段,而状态之间的转换则由输入信号和当前...

    一个有限状态机的例子

    在“Chapter 15--FSM”这个压缩包中,可能包含了关于有限状态机的详细讲解,包括基本概念、设计原则、如何用代码实现状态机以及具体的应用案例。通过阅读这些材料,你将能够更好地理解如何构建和使用有限状态机来...

    有限状态机vc实现

    在这个特定的场景中,我们讨论的是如何使用Visual C++(简称VC)来实现一个基于有限状态机的停等协议。停等协议是一种简单的错误检测和纠正机制,用于确保数据在两个通信节点之间可靠地传输。 停等协议的基本思想是...

    三段式状态机在单片机中的实现.pdf

    在单片机应用中,由于CPU在同一时间段内只能执行一个任务,因此实现状态机需要使用定时中断。定时中断服务程序不断地检索条件,并根据这些条件改变状态。状态的改变和条件的改变逻辑通常使用枚举量定义状态量,状态...

    最好的状态机源代码

    在C#中实现状态机,通常有两种方式:枚举型状态机和类型态机。这个5星评价的源代码可能采用了其中一种或两种方法,甚至可能包含了一些创新的设计。 1. 枚举型状态机:利用C#的枚举类型来表示状态,通过switch语句或...

    四种典型C语言状态机源代码

    1. **单状态机:**这是最基础的状态机形式,只有一个当前状态。源代码可能通过枚举类型定义不同的状态,并使用一个变量来存储当前状态。状态的转换通常是通过特定的输入或条件触发。学习此部分可以理解如何使用C语言...

    C语言状态机

    - **有限状态机(FSM)类**:如果使用C++,可以创建一个类来封装状态机的所有组件,但在C语言中,可以使用函数指针模拟类的行为。 6. **状态机的流程**:程序会有一个主循环,不断地检查当前状态,并根据发生的...

    一种基于查表的状态机C语言实现

    本篇文章将探讨如何使用C语言来实现基于查表的状态机,特别是在不支持多线程消息处理的环境中。 首先,我们要理解状态机的基本概念。状态机由一组状态和一系列转换规则组成。每个状态都有可能接收到某些输入,这些...

Global site tag (gtag.js) - Google Analytics