当前位置: 首页 > news >正文

计算机体系架构-----设计模式:状态模式(从程序员加班问题切入)

文章目录

  • 1.梦开始的地方
  • 2.代码1.0版本
  • 3.代码2.0版本
  • 4.代码3.0版本
  • 5.梦结束的地方

最近在学习这个专业课里面的体系结构这门课程,作为专业里面的一门基础课,这个课程里面主要讲解的就是软件的设计思想,一些历程之类的,包括了面向对象的设计方法和面向数据流的设计方法;

但是我认为更加重要的就是这个设计原则和23种常见的设计模式,设计模式不仅仅是我们考试的重点,更是我们面试的时候的考察的重点,学校老师对于这个里面的一些内容讲得效果不是很好,主要原因就是他没有读过非常著名的一本书:大话设计模式,这本书是设计模式里面的一本非常经典的这个书籍,我觉得看这本书自学的效果也比听老师讲解的这个效果很好(我们自己学校)并不是说老师讲的不好,但是听老师讲完之后感觉跟没学一样,有些老师讲课还是非常认真的;

今天我们来学习一下这个状态模式,参考的就是《大话设计模式》推荐大家去阅读以下,我这里写一下自己的思考和想法吧,主要就是按照这本书里面的第16章的思路进行书写的;

1.梦开始的地方

状态模式,看着这个名字就知道这个设计模式需要我们去处理的问题就是针对于不同的状态去进行管理,在这本书里面使用加班的问题进行相关的说明,整体的逻辑和思路非常的流畅,通过不同版本的代码修改前后的变化帮助我们的读者去进行学习这个设计模式对应的思想和具体的适用场景;

image-20250508162612650

加班问题,主要就是针对于不同的时刻,对应着不同的状态,发生了不同的事情和问题,我们根据用户输入的不同的时刻的信息,去进行相关的内容的输出;

2.代码1.0版本

下面的这个方法就是我们的主函数里面需要调用的这个方法,writeprogram方法们主要就是针对于时间的不同区体现出来不同的工作的状态;

下面的这个代码里面的最后一个else里面又被划分为不同的情况,如果你的任务完成了,加班呢就没有事情了,但是如果你的任务没有完成,这个时候我们需要考虑加班这个时间段里面对应的这个工作的状态;

image-20250508162825875

在我们的下面的主函数里面,主要就是针对于这个不同的时间段去调用我们的这个自定义函数,打印具体的不同时刻下面对应的这个状态的相关的信息;

image-20250508163142187

在这本书里面显然指出来了上面的这个代码里面需要处理的问题,就是我们的代码里面的分支条件判断的语句太多了,而且上面的这个方法代码是面向过程进行编程的,没有使用我们的面向对象的这个相关思想;

下面的这个就是书本里面的两个任务的对话:程序员在教导这个小白如何使用面向对象的这个思想对于我们的上面的原来的代码进行相关的修改操作,也就是需要进行类的封装和我们的属性的定义,我们需要从加班的这个实际的场景里面去封装类,定义这个过程里面的涉及到的属性之类的;

image-20250508163323498

3.代码2.0版本

针对于上面的类的封装和属性的定义,我们的故事的主人公对于上面的代码进行了修改,也就是我们的这个题目2.0版本的代码:

下面的这个代码里面可以明显的看到这个对应的类的封装(work这个类),里面也是包含了这个相关的过程里面需要使用到的这个属性,诸如我们的hour,也就是这个过程里面涉及到的这个时间

image-20250508163548840

但是不可否认的就是,这个代码自定义方法里面的内容依然是过长的;在文章里面,作者是使用下面的这个例子进行相关的说明,实际上不仅如此,这个方法的定义还违反了我们的单一职责的原则,就是每一个方法里面的职责都是有限的;

但是我们的上面的代码里面,显然我们的任何时刻的任务的修改,都需要去修改这个方法,但是我们的单一职责原则是每一个方法只需要负责我们的这个过程里面的一个职责,也就是这个程序的职责太大了,违反了单一职责的原则;

image-20250508164049407

接下来改进的方向:就是把我们的不同的状态进行分类,凸显我们的状态模式对应的这个思想;

4.代码3.0版本

下面的这个是修改之前的作者告诉我们的这个设计模式对应的好处,以及这个对应的情况;

image-20250508164517303

下面的这个就是作者定义抽象类,并且针对于不同的类,都去实现我们的抽象类里面的这个写程序的方法,我们新增三个类去实现这个里面的方法,并且每一个类都是对应的不同的时段;

image-20250508165916494

这个时候的工作类里面,也没有很长的这个分支判断的语句:都是对象的创建和调用这个类里面的相关的方法

image-20250508170608566

5.梦结束的地方

这个时候,回到故事开始的这个地方,我们如果想要修改这个里面的内容,还需不需要作很大的这个修改呢,这个时候是完全不需要的,

这个时候,我们添加一个新的强制下班的状态就可以了,而且这个时候是不影响我们的其他状态里面的代码的,达到了我们的目的;

image-20250508170910671

下面的这个就是如何进行跳转的这个示例代码:

image-20250508170723053

)]

下面的这个就是如何进行跳转的这个示例代码:

[外链图片转存中…(img-1LieNLA5-1746699308264)]

这个就是状态模式的全部内容啦,感谢你的观看;

相关文章:

  • 顺丰科技:从 Presto 到 Doris 湖仓构架升级,提速 3 倍,降本 48%
  • GoWeb开发
  • R1-Searcher:用强化学习解锁大语言模型检索新能力!
  • 【ArcGIS技巧】用地块生成界址点去重、顺时针编号挂接DKBM属性
  • [python] 函数基础
  • B站pwn教程笔记-8
  • 【微信小程序开发】从0开始的一点点小记录
  • 电厂参与全球能源效率排名的方法
  • Python实现中文数字与阿拉伯数字映射生成器(支持0-9999)
  • 《开源先锋Apache软件基金会:历史沿革、顶级项目与行业影响》
  • Android单例模式知识总结
  • 使用迁移学习的自动驾驶汽车信息物理系统安全策略
  • Java数据结构——Queue
  • LeetCode热题100--54.螺旋矩阵--中等
  • 商业中的人工智能 (AI) 是什么?
  • 大疆无人机(全系列,包括mini)拉流至电脑,实现直播
  • 【链表扫盲】FROM GPT
  • 第四章 OpenCV篇—图像梯度与边缘检测—Python
  • Rust包、crate与模块管理
  • 【 Redis | 实战篇 短信登录 】
  • 2025年上海市模范集体、劳动模范和先进工作者名单揭晓
  • 1450亿元!财政部拟发行2025年中央金融机构注资特别国债(二期)
  • 海关总署统计分析司司长:4月进出口增速较一季度加快4.3个百分点
  • 招行:拟出资150亿元全资发起设立金融资产投资公司
  • 深入贯彻中央八项规定精神学习教育中央第六指导组指导督导中国工商银行见面会召开
  • 欧派家居:一季度营收降4.8%,目前海外业务整体体量仍较小