Stateless状态机食用示例

Stateless 是一个 C# 库,它可以帮助我们简化状态机的实现。下面是使用 Stateless 实现一个简单的状态机的示例:

Copy

using System;
using Stateless;

public enum TrafficLightState { Green, Yellow, Red }

public enum TrafficLightTrigger { TimerElapsed, CarDetected }

public class TrafficLight
{
    private readonly StateMachine<TrafficLightState, TrafficLightTrigger> _stateMachine;

    public TrafficLight()
    {
        _stateMachine = new StateMachine<TrafficLightState, TrafficLightTrigger>(TrafficLightState.Green);

        _stateMachine.Configure(TrafficLightState.Green)
            .Permit(TrafficLightTrigger.TimerElapsed, TrafficLightState.Yellow);

        _stateMachine.Configure(TrafficLightState.Yellow)
            .Permit(TrafficLightTrigger.TimerElapsed, TrafficLightState.Red)
            .Permit(TrafficLightTrigger.CarDetected, TrafficLightState.Red);

        _stateMachine.Configure(TrafficLightState.Red)
            .Permit(TrafficLightTrigger.TimerElapsed, TrafficLightState.Green)
            .Permit(TrafficLightTrigger.CarDetected, TrafficLightState.Green);
    }

    public void Trigger(TrafficLightTrigger trigger)
    {
        _stateMachine.Fire(trigger);
        Console.WriteLine($"Traffic light state: {_stateMachine.State}");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var trafficLight = new TrafficLight();
        trafficLight.Trigger(TrafficLightTrigger.TimerElapsed);
        trafficLight.Trigger(TrafficLightTrigger.CarDetected);
        trafficLight.Trigger(TrafficLightTrigger.TimerElapsed);
        trafficLight.Trigger(TrafficLightTrigger.TimerElapsed);
    }
}

在上面的示例中,我们定义了一个 TrafficLight 类,它有三个状态:Green、Yellow 和 Red。我们使用 StateMachine 类创建了一个状态机,并在每个状态中定义了可能的转换。我们还定义了两个触发器:TimerElapsed 和 CarDetected。最后,我们在程序的 Main 方法中创建了一个 TrafficLight 实例,并使用 Trigger 方法触发状态机的转换。

当我们运行这个程序时,它会输出当前的交通灯状态。输出如下:

Copy

Traffic light state: Yellow
Traffic light state: Red
Traffic light state: Green
Traffic light state: Yellow

这个程序模拟了一个交通灯的状态机。当交通灯为绿色时,它会在一定时间后变成黄色,然后变成红色。当交通灯为黄色时,它会在一定时间后变成红色,或者当有车辆通过时,立即变成红色。当交通灯为红色时,它会在一定时间后变成绿色,或者当有车辆通过时,立即变成绿色。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值