状态模式 -- 大话设计模式

在今天,读书有时是件“麻烦”事。它需要你付出时间,付出精力,还要付出一份心境。--仅以《大话设计模式》来祭奠那逝去的……

状态模式:当一个对象内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类

将与特定状态相关的行为局部化,并且将不同状态的行为分割开来

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();
        }

 

posted @ 2015-11-01 08:11  荒古禁地  阅读(200)  评论(0编辑  收藏  举报