• Index

squirrel-foundation 为 Java 提供了一个易于使用、类型安全且高度可扩展的状态机实现。

Last updated: ... / Reads: 176 Edit

 它是什么?

就像松鼠这种小巧、敏捷、聪明、警觉、可爱的动物一样,松鼠基金会旨在为企业提供一个轻量级、高度灵活和可扩展、可诊断、易于使用和类型安全的 Java 状态机实现。

下面是描述 ATM 状态变化的状态机图:

ATMStateMachine

示例代码可以在“org.squirrelframework.foundation.fsm.atm”包中找到。

 Maven

squirrel-foundation已经部署到maven中央仓库,所以你只需要在pom.xml中添加以下依赖即可。

最新发布版本:

<dependency>
<groupId>org.squirrelframework</groupId>
  <artifactId>squirrel-foundation</artifactId>
  <version>0.3.8</version>
</dependency>

最新快照版本:

<dependency>
<groupId>org.squirrelframework</groupId>
  <artifactId>squirrel-foundation</artifactId>
  <version>0.3.9-SNAPSHOT</version>
</dependency>

 快速开始

为了快速尝试 squirrel 状态机功能,请创建一个 Maven 项目并正确包含 squirrel-foundation 依赖项。然后只需运行以下示例代码即可。

public class QuickStartSample {
    
    // 1. Define State Machine Event
    enum FSMEvent {
        ToA, ToB, ToC, ToD
    }
    
    // 2. Define State Machine Class
    @StateMachineParameters(stateType=String.class, eventType=FSMEvent.class, contextType=Integer.class)
    static class StateMachineSample extends AbstractUntypedStateMachine {
        protected void fromAToB(String from, String to, FSMEvent event, Integer context) {
            System.out.println("Transition from '"+from+"' to '"+to+"' on event '"+event+
                "' with context '"+context+"'.");
        }

        protected void ontoB(String from, String to, FSMEvent event, Integer context) {
            System.out.println("Entry State \'"+to+"\'.");
        }
    }
    
    public static void main(String[] args) {
        // 3. Build State Transitions
        UntypedStateMachineBuilder builder = StateMachineBuilderFactory.create(StateMachineSample.class);
        builder.externalTransition().from("A").to("B").on(FSMEvent.ToB).callMethod("fromAToB");
        builder.onEntry("B").callMethod("ontoB");
        
        // 4. Use State Machine
        UntypedStateMachine fsm = builder.newStateMachine("A");
        fsm.fire(FSMEvent.ToB, 10);
        
        System.out.println("Current state is "+fsm.getCurrentState());
    }
}

现在您可能对示例代码有很多疑问,请耐心等待。以下用户指南将回答您的大部分问题。但在深入了解细节之前,您需要对状态机概念有基本的了解。这些材料有助于理解状态机概念。

原文链接


Comments

Make a comment

  • Index