《大话设计模式》中讲状态模式这一节名字叫做“无尽加班何时休-状态模式”。菜鸟因为编程经验不足,解决这个问题的能力不够而不得不牺牲时间去不断的写代码结果还是重复出错。

而大神每次都能深入到问题的根源运用自己的思想去写代码。每一个问题都完美的解决。

加班的菜鸟一天各个时间段状态都不一样。从開始的精神百倍到越来越疲惫。

自己写出的代码不断带来问题。

代码是程序猿思维智慧的结晶,菜鸟”程序猿没有将自己的思维融入代码写出来的是这种:

class Program{static void Main(string[] args){Work emergencyProjects = new Work();emergencyProjects.Hour = 9;emergencyProjects.WriteProgram();emergencyProjects.Hour = 10;emergencyProjects.WriteProgram();emergencyProjects.Hour = 12;emergencyProjects.WriteProgram();emergencyProjects.Hour = 13;emergencyProjects.WriteProgram();emergencyProjects.Hour = 14;emergencyProjects.WriteProgram();emergencyProjects.Hour = 17;emergencyProjects.TaskFinished = false;emergencyProjects.WriteProgram();emergencyProjects.Hour = 19;emergencyProjects.WriteProgram();emergencyProjects.Hour = 22;emergencyProjects.WriteProgram();Console.Read();}}class Work{private int hour;public int Hour{get { return hour; }set { hour = value; }}private bool finish = false;public bool TaskFinished{get { return finish; }set { finish = value; }}public void WriteProgram(){if (Hour < 12){Console.WriteLine("当前时间:{0}点 上午工作,精神百倍", Hour);}else if (Hour < 13){Console.WriteLine("当前时间{0}点 饿了,午饭;犯困,午休。", Hour);}else if (Hour < 17){Console.WriteLine("当前时间:{0}点 下午状态不错,继续努力", Hour);}else{if (finish){Console.WriteLine("当前时间{0}点 下班回家了", Hour);}else{if (Hour < 12){Console.WriteLine("当前时间{0}点 加班哦。疲累", Hour);}else{Console.WriteLine("当前时间{0}点 不行了。睡着了。

", Hour); } } } } }

这种代码方法过长。里面推断分支太多假设要添加一些情况会修改非常多的代码。给维护带来非常大的风险。

运用状态模式:

 //工作类,如今没有了过长的分支推断语句public class Work{private State current;public Work (){current = new ForenoonState();//初始化工作状态为上午,即9点}        //"钟点"属性,状态转换根据private double  hour;public double Hour{get { return hour; }set { hour = value; }            }//“任务完毕”属性,是否下班的根据private bool finish = false;public bool TaskFinished{get { return finish; }set { finish = value; }}public void SetState(State s){current = s;}public void WriteProgram(){current.WriteProgram(this);}}//抽象状态public abstract class State{public abstract void WriteProgram (Work w);}//上午工作状态public class ForenoonState : State{public override void WriteProgram(Work w){if (w.Hour < 12){ Console.WriteLine("当前时间:{0}点 上午工作,精神百倍", w.Hour); }else{w.SetState(new NoonState());w.WriteProgram();                }}}// 中午工作状态public class NoonState : State{public override void WriteProgram(Work w){if (w.Hour < 13){Console.WriteLine("当前时间:{0}点 饿了,午饭;犯困,午休。

", w.Hour); } else { w.SetState(new AfternoonState()); w.WriteProgram(); } } } //下午工作状态 public class AfternoonState : State { public override void WriteProgram(Work w) { if (w.Hour < 17) { Console.WriteLine("当前时间:{0}点 下午状态不错。继续努力", w.Hour); } else { w.SetState(new EveningState()); w.WriteProgram(); } } } //晚间工作状态 public class EveningState : State { public override void WriteProgram(Work w) { if (w.TaskFinished ) { w.SetState(new RestState()); w.WriteProgram(); } else { if (w.Hour < 21) { Console.WriteLine("当前时间:{0}点 加班哦,疲累", w.Hour); } else { w.SetState(new SleepingState()); w.WriteProgram(); } } } } //睡眠状态 public class SleepingState : State { public override void WriteProgram(Work w) { Console .WriteLine ("当前时间:{0}点 不行了,睡着",w.Hour ); } } //下班歇息状态 public class RestState : State { public override void WriteProgram(Work w) { Console.WriteLine("当前时间:{0}点 下班回家了", w.Hour); } }

client同上。

运用状态模式将特定状态相关的行为局部化,而且将不同状态的行为切割开来。把各种状态转移逻辑分布到子类之间来降低依赖。  这种程序是有灵活性的。

通往“大神”的路上……

转载于:https://www.cnblogs.com/jzdwajue/p/6977763.html

从状态模式看“大神”和“菜鸟”的差别相关推荐

  1. 好玩的程序,看大神如何玩转编程

    这篇文章是:<程序员:分享几个好玩的东东(下)>,在分享了<程序员:分享几个好玩的东东(上)>之后,不少人都在留言,期盼赶紧更新这篇文章.端午之后,当然是不负众望,给大家来一起 ...

  2. python大神和小白代码_看大神6行代码如何带领小白快速入门Python爬虫?

    原标题:看大神6行代码如何带领小白快速入门Python爬虫? 可能是小编本身就有一定的基础!当然我没有瞧不起小白的看法,知识觉得要入门一门编程语言确实比较简单,而且小编本身也是从小白过来的,但是当初接 ...

  3. 趣挨踢 | “菜鸟”程序员和“大神”程序员的差别竟然这么大...

    戳蓝字"CSDN云计算"关注我们哦! 出处 | [51CTO技术栈]   程序员这个物种自诞生以来,便产生了森严的等级制度,划分标准十分复杂却又有规律可循. 我们暂且分为:菜鸟.普 ...

  4. “菜鸟”程序员和“大神”程序员的差别竟然这么大...

    点击上方"民工哥技术之路",关注并设置"星标" 每天为你带来不一样的干货分享 " 程序员这个物种自诞生以来,便产生了森严的等级制度,划分标准十分复杂却 ...

  5. 小程序影藏溢出的gif_“菜鸟”程序员和“大神”程序员的差别竟然这么大……|程序员|代码|产品经理...

    " 程序员这个物种自诞生以来,便产生了森严的等级制度,划分标准十分复杂却又有规律可循. 我们暂且分为:菜鸟.普通.大牛.大神四个等级,并用图鉴形式来表现各个等级的不同之处. 注:reinve ...

  6. android大字体桌面,大字体桌面模式 酷派大神F2系统界面再曝光

    酷派大神F2的曝光消息逐渐多了起来,继之前的系统界面和硬件配置曝光后,现在其搭载的全新CoolUI 5.7又有了更多的曝光,其中我们不难看到CoolUI 5.7内置了大字体桌面模式,也就相当于简易模式 ...

  7. 关于别名或网名无论你是大神还是菜鸟,也许你对此一无所知

    在终端或移动端,我们会遇到很多个场合要给自己起别名或网络名,它的限制几乎没有,所以造成大家对起名字这样的事情会很无助.我们不能决定自己的真实姓名,但你可以隐藏自己的真实姓名和身份,而给自己起一个醒目或 ...

  8. java 与 模式_从状态模式看 JavaScript 与 Java

    这篇文章缘起于前几天微博上有关动态语言与静态语言的讨论,因为有几个编程高手参加,所以能看到一些特别有启发性的发言.本文主要是下面这一条微博的读后感,也是我的练习与思考. 关于动态语言与静态语言,有很多 ...

  9. 战争艺术鸿蒙返场,战争艺术 SS2赛季隆重登场 且看大神如何替你排忧解难

    新赛季随着这次的版本更新如期而至,SS2赛季伴随着新春的到来将给大家带来更多精彩的内容,为了方便各位指挥官在新赛季棋开得胜,下面请跟随拉克西丝来一起看看吧~这次特别邀请到了@白衣大佬,他带来的新版本解 ...

最新文章

  1. RabbitMQ和Kafka到底怎么选?
  2. python 柱状图宽度设置_Python matplotlib 柱状图实例
  3. 利用反射给JAVABEAN实例赋值
  4. 计算机机房门内开还是外开,卫生间的门是朝内开还是朝外开好?原来这样开,入住才方便!...
  5. AtomicStampedReference源码分析
  6. php代码加文件后缀,php中一行代码获取文件后缀名
  7. Android XML的操作(SAX)
  8. java(21) - 注解详解
  9. Hadoop连载系列之六:Hadoop数据仓库工具Hive
  10. 完全删除iCloud注册的Apple ID
  11. 大型网络之BGP路由通告路由传递配置
  12. unigine 三维旋转矩阵(mat3,quat) scale translate 变换矩阵(mat4) 和forward up right 关系 normal binormal tangent
  13. RK3288 EDP 调试
  14. 什么是项目管理?项目经理应该如何进行管理?
  15. 安全需求规范和管理指南
  16. 力源信息是鸿蒙概念股吗,力源信息(300184)个股分析_牛叉诊股_同花顺财经
  17. bootstrap table 复选框获取选中某几行的数据 + 可翻页
  18. 数据库系统、数据库、数据库管理系统简介,MySQL等服务器的比较
  19. 刘未鹏之思维改变生活!
  20. Docker容器---镜像原理以及创建

热门文章

  1. shaderlab学习一
  2. Google App Engine for Java下的URL编码转换问题
  3. ecshop管理找不到index.php,前台出现找不到这样的目录,打不开某文件的提示
  4. 电脑登陆不了网页的服务器地址,电脑能登qq不能打开网页的解决方法
  5. C语言定义code报错,C语言报错整理大全
  6. python batch normalization_Batch Normalization 引出的一系列问题
  7. #pragma指令与#ifndef指令
  8. MFC创建属性表单“所需资源不存在”错误解决方法
  9. C++_类和动态内存分配2-改进后的String类
  10. conda环境里安装pydot