菜鳥升級記——狀態模式

狀態模式

  當一個對象的內在狀態改變時允許改變其行爲(不同的狀態對應不同的行爲),這個對象看起來像是改變了其類。

    class Program
    {
        static void Main(string[] args)
        {
            Context c=new Context(new ConcreteStateA());//設置Context的初始狀態爲ConcreteStateA

            //不斷地請求,同時更改狀態
            c.Request();
            c.Request();
            c.Request();
            c.Request();

            Console.Read();
        }
    }

    //抽象狀態類,定義一個接口以封裝與Context的一個特定狀態相關的行爲
    abstract class State
    {
        public abstract void Handle(Context context);
    }

    //具體狀態類,每一個子類實現一個與Context的一個狀態相關的行爲
    class ConcreteStateA : State
    {
        public override void Handle(Context context)
        {
            context.State=new ConcreteStateB();//設置ConcreteStateA的下一狀態是ConcreteStateB
        }
    }
    class ConcreteStateB: State
    {
        public override void Handle(Context context)
        {
            context.State = new ConcreteStateA();//設置ConcreteStateB的下一狀態是ConcreteStateA
        }
    }

    //維護一個ConcreteState子類的實例,這個實例定義當前的狀態
    class Context
    {
        private State state;

        public Context(State state)//定義Context的初始狀態
        {
            this.state = state;
        }

        public State State//可讀寫的狀態屬性,用於讀取當前狀態和設置新狀態
        {
            get { return state; }
            set
            {
                state = value;
                Console.WriteLine("當前狀態:" + state.GetType().Name);
            }
        }

        public void Request()//對請求做處理,並設置下一狀態
        {
            state.Handle(this);
        }
    }

優點

  • 消除龐大的條件分支語句
  • 通過把各種狀態轉移邏輯分佈到State的子類之間,來減少相互間的依賴
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章