Python设计模式-状态模式
来源:互联网 发布:网络客服招聘 编辑:程序博客网 时间:2024/06/09 22:56
Python设计模式-状态模式
代码基于3.5.2,代码如下;
#coding:utf-8#状态模式class state(): def writeProgram(self,work): raise NotImplementedErrorclass forenoonState(state): def writeProgram(self,work): if work.isFinished: restState().writeProgram(work) else: if work.hour < 12 and work.hour >= 7: print("当前时间 : {0}点,上午工作时间,有精神".format(work.hour)) elif work.hour < 7: sleepingState().writeProgram(work) else: noonState().writeProgram(work)class noonState(state): def writeProgram(self,work): if work.isFinished: restState().writeProgram(work) else: if work.hour < 13: print("当前时间 : {0}点,中午工作时间,有精神".format(work.hour)) else: afternoonState().writeProgram(work)class afternoonState(state): def writeProgram(self,work): if work.isFinished: restState().writeProgram(work) else: if work.hour < 17: print("当前时间 : {0}点,下午工作时间,有精神".format(work.hour)) else: eveningState().writeProgram(work)class eveningState(state): def writeProgram(self,work): if work.isFinished: restState().writeProgram(work) else: if work.hour < 21: print("当前时间 : {0}点,晚上工作时间,有精神".format(work.hour)) else: sleepingState().writeProgram(work)class sleepingState(state): def writeProgram(self,work): print("当前时间 : {0}点,晚上睡觉时间,有精神".format(work.hour))class restState(state): def writeProgram(self,work): print("当前时间 : {0}点,工作已经完成下班休息".format(work.hour))class work(): def __init__(self): self.current = forenoonState() self.isFinished = False self.hour = 0 def setFinished(self,flag): self.isFinished = flag def writeProgram(self): self.current.writeProgram(self)if __name__ == "__main__": project = work() project.hour = 9 project.writeProgram() project.hour = 5 project.writeProgram() project.hour = 10 project.writeProgram() project.hour = 12 project.writeProgram() project.hour = 13 project.writeProgram() project.hour = 14 project.writeProgram() project.hour = 17 project.writeProgram() project.setFinished(True) project.hour = 19 project.writeProgram() project.hour = 22 project.writeProgram()
状态模式分析与解读
状态模式
状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
代码解读
该例子基于的需求:当工作的时间改变时,来显示不同的工作状态。1、先定义了state类,以下的工作状态类都是由该类继承而来,并实现writeProgram()方法;2、先后定义了forenoonState、noonState、afternoonState、eveningState、sleepingState和restState状态类,其中在实现每个writeProgram方法时,先判断工作是否已经完成,如果完成直接调用restState的writeProgram方法,如果当前类不能处理该请求,则接着往下个实例进行传递,如当工作未完成时,在forenoonState类中,如果超过了12点,则新建noonState类并调用该类的writeProgram方法处理,依次往下传递指导处理完成为止。
代码运行结果如下:
当前时间 : 9点,上午工作时间,有精神当前时间 : 5点,中午工作时间,有精神当前时间 : 10点,上午工作时间,有精神当前时间 : 12点,中午工作时间,有精神当前时间 : 13点,下午工作时间,有精神当前时间 : 14点,下午工作时间,有精神当前时间 : 17点,晚上工作时间,有精神当前时间 : 19点,工作已经完成下班休息当前时间 : 22点,工作已经完成下班休息
状态模式应用场景:
1、行为状态改变的场景。这点在各种控制器中非常常见,同时,逻辑结构为状态转移图的场景中都非常适用。
优缺点分析
优点
1、结构清晰,相比if ..else...简约不少;2、封装性好,外部调用不必知道内部实现细节。
缺点
1、在状态比较多时,子类也会非常多,不便于管理。
阅读全文
0 0
- Python设计模式-状态模式
- python设计模式(状态模式)
- python设计模式之状态设计模式
- python设计模式之状态模式
- Python设计模式(十三)【状态模式】
- 设计模式-状态模式-state-python
- python设计模式之状态模式
- 设计模式:状态模式
- 设计模式-----状态模式
- 设计模式 状态模式
- 设计模式 - 状态模式
- 设计模式---状态模式
- 设计模式-状态模式
- 设计模式:状态模式
- 设计模式 - 状态模式
- 设计模式-状态模式
- 设计模式--状态模式
- 设计模式-状态模式
- kernel (I) basic learning
- Python设计模式-解释器模式
- ubuntu16.04 安装有道词典
- Python设计模式-中介者模式
- Python设计模式-备忘录模式
- Python设计模式-状态模式
- 非线性最小二乘法优化问题(1)
- Python基础-多进程
- kernel(II)
- GC日志解读
- NUC1312 Sum【水题+数学题】
- join不产生Shuffle的情况及案例实战
- 鬼火引擎irrlicht一些功能资源收集
- NUC1371 Who's in the Middle【中位数+排序】