Tôi đã viết một FSM động đơn giản. Dynamic
có nghĩa là chuyển đổi trạng thái là động và không tĩnh như được hiển thị trong ConcreteStateB
.Cách tiếp cận khác .net cho máy trạng thái động
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);
}
}
}
}
Điều này thực hiện máy trạng thái như được mô tả trong GoF305
.
Vì tôi mới sử dụng C# và .net: Có phương pháp nào tốt hơn để lưu mục tiêu này bằng các tính năng cụ thể hơn từ .net
hoặc C#
?