状态机

52 阅读1分钟

状态机(State Machine)是一种用于建模系统行为的抽象模型。它由一组状态和一组引起状态转换的事件组成。状态机描述了一个系统在不同状态下的行为和状态之间的转换规则。 简单说,接收事件,转换状态

一个状态机通常包括以下几个主要部分:

  1. 状态(States):

    系统可能处于的不同状态的集合。每个状态表示系统在某一时刻的情况或配置。

  2. 事件(Events):

    导致状态转换的外部输入或内部条件。

  3. 转换(Transitions):

定义状态之间的转换规则,即在某一状态下接收到某一事件时如何转换到下一个状态。

  1. 初始状态(Initial State):

系统开始时所处的状态。

  1. 终止状态(Final States)(可选):

系统可能终止的状态。

什么是状态机(Finite-state machine)?-CSDN博客

业务逻辑与状态转换有关用这个

public class OrderFSM
{
    public enum State { Created, Paid, Shipped }
    public State CurrentState { get; private set; } = State.Created;

    // 第一段:状态转移逻辑
    private State GetNextState(string eventName)
    {
        switch (CurrentState)
        {
            case State.Created:
                return eventName == "Pay" ? State.Paid : CurrentState;
            case State.Paid:
                return eventName == "Ship" ? State.Shipped : CurrentState;
            default:
                return CurrentState;
        }
    }

    // 第二段:行为逻辑
    private void ExecuteStateAction(State newState)
    {
        switch (newState)
        {
            case State.Paid:
                // 执行支付后的业务逻辑
                break;
            case State.Shipped:
                // 执行发货后的业务逻辑
                break;
        }
    }

    // 第三段:外部输出(如日志、通知)
    private void NotifyStateChange(State newState)
    {
        Console.WriteLine($"State changed to {newState}");
    }

    // 整合处理
    public void ProcessEvent(string eventName)
    {
        var nextState = GetNextState(eventName);
        if (nextState != CurrentState)
        {
            ExecuteStateAction(nextState);
            NotifyStateChange(nextState);
            CurrentState = nextState;
        }
    }
}