文章出處

在今天,讀書有時是件“麻煩”事。它需要你付出時間,付出精力,還要付出一份心境。--僅以《大話設計模式》來祭奠那逝去的……

狀態模式:當一個對象內在狀態改變時,允許改變其行為,這個對象看起來像是改變了其類

將與特定狀態相關的行為局部化,并且將不同狀態的行為分割開來

1.男人吃飽了工作,餓了不想工作

  早上起來,男人吃了飯,大喊一聲,我吃飽了,開始工作了;工作了12個小時候,還沒吃飯~,大喊一聲,我餓了,不想工作了

  定義抽象狀態類,以及具體的吃飽和饑餓狀態類,定義每個狀態對應的行為方式

    /// <summary>
    /// 抽象狀態類
    /// </summary>
    public abstract class State
    {
        public abstract void Action(Man man);
    }

    /// <summary>
    /// 吃飽狀態
    /// </summary>
    public class FullState : State
    {
        public override void Action(Man man)
        {
            Console.WriteLine("我吃飽了,開始工作了");
        }
    }

    /// <summary>
    /// 饑餓狀態
    /// </summary>
    public class HungeryState : State
    {
        public override void Action(Man man)
        {
            Console.WriteLine("我餓了,不想工作了");
        }
    }

   定義男人類(執行具體的業務)

    /// <summary>
    /// 男人類
    /// </summary>
    public class Man
    {
        private State currentState;

        public Man(State state)
        {
            this.currentState = state;
        }

        public void Work()
        {
            Console.WriteLine("我已經工作了12個小時了,還沒吃飯呢~");

            this.currentState = new HungeryState();
        }

        public void Say()
        {
            currentState.Action(this);
        }
    }

   開啟場景模擬

        static void Main(string[] args)
        {
            //早上起來,男人吃了飯
            Man man = new Man(new FullState());

            //大喊一聲,我吃飽了,開始工作了
            man.Say();

            //工作了12個小時候,還沒吃飯~
            man.Work();

            //大喊一聲,我餓了,不想工作了
            man.Say();
        }

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()