狀態模式(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/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。