实现有限状态机 FSM (1)

嵌套 switch/case 语句

public enum State
{
    LOCKED,
    UNLOCKED
}

public enum Event
{
    COIN,
    PASS
}

public interface TurnstileController
{
    void Lock();
    void Unlock();
    void ThankYou();
    void Alarm();
}

public class Turnstile
{
    private State state = State.LOCKED;
    private TurnstileController turnstileCtrller;
    private Turnstile(TurnstileController action)
    {
        this.turnstileCtrller = action;
    }

    public void HandEvent(Event e)
    {
        switch (state)
        {
            case State.LOCKED:
                {
                    switch (e)
                    {
                        case Event.COIN:
                            state = State.UNLOCKED;
                            turnstileCtrller.Unlock();
                            break;
                        case Event.PASS:
                            turnstileCtrller.Alarm();
                            break;
                        default:
                            break;
                    }
                }
                break;
            case State.UNLOCKED:
                {
                    switch(e)
                    {
                        case Event.COIN:
                            turnstileCtrller.ThankYou();
                            break;
                        case Event.PASS:
                            state = State.LOCKED;
                            turnstileCtrller.Lock();
                            break;
                        default:
                            break;
                    }
                }
                break;
            default:
                break;
        }
    }
}