나는 간단한 동적 FSM을 썼다. Dynamic
은 ConcreteStateB
과 같이 상태 전환이 동적이지 정적 인 것을 의미합니다.동적 상태 머신을위한 .net 접근 더
namespace FSM_Example
{
using System;
class Program
{
static void Main()
{
var context = new Context(new ConcreteStateA());
context.Run();
Console.Read();
}
}
abstract class State
{
public abstract void Execute(Context context);
}
class ConcreteStateA : State
{
public override void Execute(Context context)
{
context.State = new ConcreteStateB();
}
}
class ConcreteStateB : State
{
public override void Execute(Context context)
{
Console.Write("Input state: ");
string input = Console.ReadLine();
context.State = input == "e" ? null : new ConcreteStateA();
}
}
class Context
{
private State _state;
public Context(State state)
{
State = state;
}
public State State
{
get { return _state; }
set
{
_state = value;
Console.WriteLine("State: " + _state.GetType().Name);
}
}
public void Run()
{
while (_state != null)
{
_state.Execute(this);
}
}
}
}
이것은 GoF305
에 설명 된 상태 기계를 구현합니다.
저는 C#과 .net을 처음 사용 했으므로 .net
또는 C#
의보다 구체적인 기능을 사용하여 더 나은 접근 방법이 있습니까?