zoukankan      html  css  js  c++  java
  • 状态模式

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

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

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

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

        下面我们来看一个例子,

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

          

       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.
  • 相关阅读:
    聊天界面的实现
    继续,迫不及待想学数据库
    今天休息,我来研究上次的代码了
    项目导入
    命令行常用的一下命令
    svn的安装和基本操作,及常见问题
    maven项目里写测试
    Eclipse里新建maven项目
    maven简介
    重装win7,没有管理员权限,没有以管理员身份运行
  • 原文地址:https://www.cnblogs.com/student-note/p/6131591.html
Copyright © 2011-2022 走看看