状态模式(python)
来源:互联网 发布:为什么淘宝上苏宁易购 编辑:程序博客网 时间:2024/06/18 13:15
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
应用场景:一个对象的行为取决于它的状态,即它必须在运行时刻根据状态改变它的行为。如果控制状态转换的条件表达式过于复杂,就可以考虑使用状态模式。
关键点:把状态的判断逻辑转移到表示不同状态的一系列类当中,这样就可以简化复杂的逻辑判断了。
优点:将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。
#encoding=utf-8##by panda#状态模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')#State:上班状态基类class State(): def WriteProgram(): pass#上午工作状态类class ForenoonState(State): def WriteProgram(self,w): if (w.Hour < 12): printInfo("当前时间:%d点 工作状态:上午工作,精神百倍" % w.Hour) else: w.SetState(noonState()) w.WriteProgram() #中午工作状态类class noonState(State): def WriteProgram(self,w): if (w.Hour < 13): printInfo("当前时间:%d点 午饭;午休" % w.Hour) else: w.SetState(AfternoonState()) w.WriteProgram(); #下午工作状态类class AfternoonState(State): def WriteProgram(self,w): if (w.Hour < 18): printInfo("当前时间:%d点 下午状态还不错,继续努力" % w.Hour) else: w.SetState(EveningState()) w.WriteProgram();#晚上工作状态类class EveningState(State): def WriteProgram(self,w): if(w.TaskFinished): w.SetState(RestState()) w.WriteProgram() return if (w.Hour < 21): printInfo("当前时间:%d点 加班哦,好累!" % w.Hour) else: w.SetState(SleepingState()) w.WriteProgram();#睡眠状态class SleepingState(State): def WriteProgram(self,w): printInfo("当前时间:%d点 睡觉了" % w.Hour)#下班工作状态class RestState(State): def WriteProgram(self,w): printInfo("当前时间:%d点 下班回家了" % w.Hour) #Context:上班class Work(): state = ForenoonState(); TaskFinished = False Hour = 8.0 def SetState(self, state): self.state = state def WriteProgram(self): self.state.WriteProgram(self)def clientUI(): work = Work() for i in range(9,23,1): work.Hour = i if(i > 19): work.TaskFinished = True work.WriteProgram() returnif __name__ == '__main__': clientUI();
类图:
- 状态模式(python)
- 状态模式(python)
- Python设计模式-状态模式
- python设计模式(状态模式)
- python设计模式之状态模式
- Python设计模式(十三)【状态模式】
- 设计模式-状态模式-state-python
- python设计模式之状态模式
- python设计模式之状态设计模式
- 设计模式十七(状态模式,python语言实现)
- 大话设计模式(Python版)--状态模式
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- System.Globalization.NumberFormatInfo 的 30个属性、1个构造函数和10个方法
- IEEE 754 double 编码为二进制
- 《Windows via C/C++》学习笔记 —— “线程同步”之“检测死锁”
- linux 调试
- weblogic node maanger 远程命令执行漏洞
- 状态模式(python)
- iperf的相关介绍
- ANT -----android 开发认识到的工具
- Openbsd /home /var 对调
- C# TreeView 节点查找
- DMServer性能测试问题总结
- 怎样确定职业发展方向
- linux设备驱动学习笔记——重要的一些概念
- wimform 导出数据 excel