在FSM中为状态转换提供参数的最佳方式

本文关键字:参数 最佳 方式 转换 FSM 状态 | 更新日期: 2023-09-27 17:51:05

我的FSM中的一个状态需要来自外部世界的一些信息来完成它的工作。在请求转换时需要提供此信息。实现这一目标的最佳方式是什么?此时,我正在使用FSM类作为黑板来在各州之间共享信息。

一个真正肮脏的解决方案可能是将这些信息缓存在FSM中,并在请求转换之前填充它,并让状态从FSM的黑板上获得它。我真的不喜欢它。

我的语言是c#

欢呼。

在FSM中为状态转换提供参数的最佳方式

显示我传递委托的意思:

class MyStateMachine
{
  private readonly Func<string> askForName;
  public MyStateMachine(Func<string> askForName)
  {
    this.askForName = askForName;
  }
  // ...
  void StateTransitionForActionX()
  {
    var name = askForName();
    // ...
  }
}
public MyStateMachine CreateMachine()
{
  return new MyStateMachine
   (
     () => 
     {
       Console.WriteLine("Please, enter your name: ");
       return Console.ReadLine();
     }
   );
}

当然,这可以用于任何数据请求-使用控制台似乎只是一个简单的方式来说明这个想法:)闭包尤其可以非常强大。