状态模式

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

  状态模式主要解决的是当控制一个对象 状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的 一系列类当中.可以把复杂的判断逻辑简化.

    那么问题来了,这个模式在什么时候可以被使用呢?

      从定义中我们可以得出,如果一个类的状态是根据某个值的改变而改变,并且必须在运行时刻根据状态去改变它的行为的时候.

    下面我们来看一个例子,

      假如说:有一辆高科技汽车,他会根据不同的车速来提醒对应的提示语

      

   abstract  class State
    {
       public abstract void Handle(Car c);
    }
    class LowerBlast:State
    {

        public override void Handle(Car c)
        {
            if (c.Blast<50)
            {
                Console.WriteLine("车现在的速度还是很慢,很安全的,请放心驾驶");
                return;
            }
            c.SetState(new Moidding());
            c.SayTitle();
           
        }
    }
    class Moidding:State
    {

        public override void Handle(Car c)
        {
            if (c.Blast<100)
            {
                Console.WriteLine("现在的速度还是有点看头的");
                return;
            }
            c.SetState(new Flast());
            c.SayTitle();

        }
    }
    class Flast:State
    {

        public override void Handle(Car c)
        {
            Console.WriteLine("现在的车速为:{0},请您注意生命安全!!!",c.Blast);
        }
    }
    class Car
    {
        private State state = new LowerBlast();
        private int blast = 0;//速度
        public int Blast
        {
            get;
            set;
        }
        public void SetState(State c)
        {
            this.state = c;
        }
        public void SayTitle()
        {
            state.Handle(this);
        }
    }

 调用代码如下:

  

        static void Main(string[] args)
        {
            Car c = new Car();
            c.Blast = 120;
            c.SayTitle();
            Console.Read();
        }

    从上面这个例子我们就可以看出,要实现这个状态模式并不难,最重要的就是通过"状态"来对一个类的行为进行改变,然后向上传递

Hold on, everything is possible.
原文地址:https://www.cnblogs.com/student-note/p/6131591.html