计算机体系架构-----设计模式:状态模式(从程序员加班问题切入)
文章目录
- 1.梦开始的地方
- 2.代码1.0版本
- 3.代码2.0版本
- 4.代码3.0版本
- 5.梦结束的地方
最近在学习这个专业课里面的体系结构这门课程,作为专业里面的一门基础课,这个课程里面主要讲解的就是软件的设计思想,一些历程之类的,包括了面向对象的设计方法和面向数据流的设计方法;
但是我认为更加重要的就是这个设计原则和23种常见的设计模式,设计模式不仅仅是我们考试的重点,更是我们面试的时候的考察的重点,学校老师对于这个里面的一些内容讲得效果不是很好,主要原因就是他没有读过非常著名的一本书:大话设计模式,这本书是设计模式里面的一本非常经典的这个书籍,我觉得看这本书自学的效果也比听老师讲解的这个效果很好(我们自己学校)并不是说老师讲的不好,但是听老师讲完之后感觉跟没学一样,有些老师讲课还是非常认真的;
今天我们来学习一下这个状态模式,参考的就是《大话设计模式》推荐大家去阅读以下,我这里写一下自己的思考和想法吧,主要就是按照这本书里面的第16章的思路进行书写的;
1.梦开始的地方
状态模式,看着这个名字就知道这个设计模式需要我们去处理的问题就是针对于不同的状态去进行管理,在这本书里面使用加班的问题进行相关的说明,整体的逻辑和思路非常的流畅,通过不同版本的代码修改前后的变化帮助我们的读者去进行学习这个设计模式对应的思想和具体的适用场景;
加班问题,主要就是针对于不同的时刻,对应着不同的状态,发生了不同的事情和问题,我们根据用户输入的不同的时刻的信息,去进行相关的内容的输出;
2.代码1.0版本
下面的这个方法就是我们的主函数里面需要调用的这个方法,writeprogram方法们主要就是针对于时间的不同区体现出来不同的工作的状态;
下面的这个代码里面的最后一个else里面又被划分为不同的情况,如果你的任务完成了,加班呢就没有事情了,但是如果你的任务没有完成,这个时候我们需要考虑加班这个时间段里面对应的这个工作的状态;
在我们的下面的主函数里面,主要就是针对于这个不同的时间段去调用我们的这个自定义函数,打印具体的不同时刻下面对应的这个状态的相关的信息;
在这本书里面显然指出来了上面的这个代码里面需要处理的问题,就是我们的代码里面的分支条件判断的语句太多了,而且上面的这个方法代码是面向过程进行编程的,没有使用我们的面向对象的这个相关思想;
下面的这个就是书本里面的两个任务的对话:程序员在教导这个小白如何使用面向对象的这个思想对于我们的上面的原来的代码进行相关的修改操作,也就是需要进行类的封装和我们的属性的定义,我们需要从加班的这个实际的场景里面去封装类,定义这个过程里面的涉及到的属性之类的;
3.代码2.0版本
针对于上面的类的封装和属性的定义,我们的故事的主人公对于上面的代码进行了修改,也就是我们的这个题目2.0版本的代码:
下面的这个代码里面可以明显的看到这个对应的类的封装(work这个类),里面也是包含了这个相关的过程里面需要使用到的这个属性,诸如我们的hour,也就是这个过程里面涉及到的这个时间
但是不可否认的就是,这个代码自定义方法里面的内容依然是过长的;在文章里面,作者是使用下面的这个例子进行相关的说明,实际上不仅如此,这个方法的定义还违反了我们的单一职责的原则,就是每一个方法里面的职责都是有限的;
但是我们的上面的代码里面,显然我们的任何时刻的任务的修改,都需要去修改这个方法,但是我们的单一职责原则是每一个方法只需要负责我们的这个过程里面的一个职责,也就是这个程序的职责太大了,违反了单一职责的原则;
接下来改进的方向:就是把我们的不同的状态进行分类,凸显我们的状态模式对应的这个思想;
4.代码3.0版本
下面的这个是修改之前的作者告诉我们的这个设计模式对应的好处,以及这个对应的情况;
下面的这个就是作者定义抽象类,并且针对于不同的类,都去实现我们的抽象类里面的这个写程序的方法,我们新增三个类去实现这个里面的方法,并且每一个类都是对应的不同的时段;
这个时候的工作类里面,也没有很长的这个分支判断的语句:都是对象的创建和调用这个类里面的相关的方法
5.梦结束的地方
这个时候,回到故事开始的这个地方,我们如果想要修改这个里面的内容,还需不需要作很大的这个修改呢,这个时候是完全不需要的,
这个时候,我们添加一个新的强制下班的状态就可以了,而且这个时候是不影响我们的其他状态里面的代码的,达到了我们的目的;
下面的这个就是如何进行跳转的这个示例代码:
)]
下面的这个就是如何进行跳转的这个示例代码:
[外链图片转存中…(img-1LieNLA5-1746699308264)]
这个就是状态模式的全部内容啦,感谢你的观看;