大话设计模式Python实现-状态模式
状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
下面是一个状态模式的demo:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 __author__ = 'Andy' 5 """ 6 大话设计模式 7 设计模式——状态模式 8 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 9 应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化 10 (当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变他的行为) 11 """ 12 class State(object): 13 def __init__(self): 14 pass 15 16 def write_program(self, w): 17 pass 18 19 class Work(object): 20 21 def __init__(self): 22 self.hour = 9 23 self.curr = ForenoonState() 24 25 def set_state(self, s): 26 self.curr = s 27 28 def write_program(self): 29 self.curr.write_program(self) 30 31 32 class ForenoonState(State): 33 34 def write_program(self, w): 35 if w.hour < 12: 36 print "当前时间:%s点,"%w.hour,"精神百倍" 37 else: 38 w.set_state(AfternoonState()) 39 w.write_program() 40 41 class AfternoonState(State): 42 43 def write_program(self, w): 44 if w.hour < 17: 45 print "当前时间:%s点,"%w.hour,"状态还行,继续努力" 46 else: 47 w.set_state(EveningState()) 48 w.write_program() 49 50 class EveningState(State): 51 52 def write_program(self, w): 53 if w.hour < 21: 54 print "当前时间:%s点,"%w.hour,"加班呢,疲劳了" 55 else: 56 w.set_state(SleepState()) 57 w.write_program() 58 59 60 class SleepState(State): 61 62 def write_program(self, w): 63 print "当前时间:%s点,"%w.hour,"不行了,睡着了" 64 65 if __name__=="__main__": 66 work = Work() 67 work.hour = 9 68 work.write_program() 69 work.hour = 15 70 work.write_program() 71 work.hour = 20 72 work.write_program() 73 work.hour = 22 74 work.write_program()
上面类的设计如下图:
应用场景:当控制一个对象的状态转换的条件表达式过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化
(当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变他的行为)
作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。