状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

下面是一个状态模式的demo:

 #!/usr/bin/env python
# -*- coding:utf-8 -*- __author__ = 'Andy'
"""
大话设计模式
设计模式——状态模式
状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化
(当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变他的行为)
"""
class State(object):
def __init__(self):
pass def write_program(self, w):
pass class Work(object): def __init__(self):
self.hour = 9
self.curr = ForenoonState() def set_state(self, s):
self.curr = s def write_program(self):
self.curr.write_program(self) class ForenoonState(State): def write_program(self, w):
if w.hour < 12:
print "当前时间:%s点,"%w.hour,"精神百倍"
else:
w.set_state(AfternoonState())
w.write_program() class AfternoonState(State): def write_program(self, w):
if w.hour < 17:
print "当前时间:%s点,"%w.hour,"状态还行,继续努力"
else:
w.set_state(EveningState())
w.write_program() class EveningState(State): def write_program(self, w):
if w.hour < 21:
print "当前时间:%s点,"%w.hour,"加班呢,疲劳了"
else:
w.set_state(SleepState())
w.write_program() class SleepState(State): def write_program(self, w):
print "当前时间:%s点,"%w.hour,"不行了,睡着了" if __name__=="__main__":
work = Work()
work.hour = 9
work.write_program()
work.hour = 15
work.write_program()
work.hour = 20
work.write_program()
work.hour = 22
work.write_program()

上面类的设计如下图:

应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化

(当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变他的行为)

作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

最新文章

  1. Entity Framework在Asp.net MVC中的实现One Context Per Request(附源码)
  2. SIFT特征提取分析(转载)
  3. Firefox中一个很好用的host工具--HostAdmin
  4. android模拟器(genymotion)+appium+python 框架执行过程中问题解答
  5. python flask model 序列化
  6. JADE提升篇
  7. object-c 1
  8. HDOJ-1002 A + B Problem II (非负大整数相加)
  9. VS2010(2012)中使用Unit Testing进行单元测试
  10. Linux TCP连接数修改
  11. pandas教程
  12. WPF如何实现TreeView节点重命名
  13. javascript 闭包内部机制
  14. 【内存泄漏】 C/C++内存泄漏及其检测工具
  15. 2-[Mysql]- 初识sql语句
  16. interrupt_control
  17. 首页设计的可用性和PET
  18. 查看 dll 是32位还是64位 的 bat
  19. 全国Uber优步司机奖励政策 (12月28日-1月3日)
  20. TPO-10 C2 Return a literature book

热门文章

  1. SQL Server设置数据库为状态为只读
  2. json数据格式与字典数据类型之间的相互转换
  3. plsql基础练习题
  4. day01(无用)
  5. Hive_hdfs导入csv文件
  6. 为了能早点买房,我用 Python 预测房价走势!
  7. django1-web开发基础知识
  8. xml解析-jaxp添加结点
  9. Tomcat启动分析(一)-从脚本到main函数分析
  10. ms sql事务输出错误