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

时间:2015-05-29 14:15:02

标签: c# state-machine

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

一个非常脏的解决方案可能是将此信息缓存在FSM中并在请求转换之前填充它,让状态从FSM黑板中获取。我不是很喜欢它。

我的语言是C#

干杯。

1 个答案:

答案 0 :(得分:0)

通过传递代表来表明我的意思:

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();
     }
   );
}

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