狀態模式
狀態模式(state pattern)是設計模式的一種,屬於行為模式。
定義(源於design pattern):當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。
狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。
意圖:允許乙個物件在其內部狀態改變時改變它的行為
適用場景:
1.乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為。
2.乙個操作中含有龐大的多分支結構,並且這些分支決定於物件的狀態。
類圖:
python**實現(仿大話設計模式示例):
class state:'''@summary: 狀態父類,用於抽象狀態方法,
+每增加一種狀態,只需要增加乙個子類,並修改相關狀態的跳轉
@ivar ivar: type
@author: whzhang
@since: 2011-7-5
@change:
'''def __init__(self):
pass
def writeprogrem(self, w):
pass
class nonnstate(state):
def writeprogrem(self, w):
if w.gethour() < 12:
else:
w.setstate(afterstate())
w.writeprogram()
class afterstate(state):
def writeprogrem(self, w):
if w.gethour() < 14:
else:
w.setstate(eeveningstate())
w.writeprogram()
class eeveningstate(state):
def writeprogrem(self, w):
if w.getfinish():
else:
# if w.gethour() < 18:
# else:
# w.writeprogram()
class work:
def __init__(self):
self.__hour = none
self.__state = nonnstate()
self.__finish = false
def gethour(self):
return self.__hour
def sethour(self, h):
self.__hour = h
def setstate(self, s):
self.__state = s
def getfinish(self):
return self.__finish
def setfinish(self, f):
self.__finish = f
def writeprogram(self):
self.__state.writeprogrem(self)
if __name__ == '__main__':
work = work()
work.sethour(10)
work.writeprogram()
work.sethour(13)
work.writeprogram()
work.sethour(19)
work.writeprogram()
work.sethour(21)
work.setfinish(true)
work.writeprogram()
Python設計模式 狀態設計模式
狀態設計模式的簡單示例 優缺點乙個物件可以基於其內部狀態封裝多個行為。狀態模式可以看作在執行時改變物件行為的一種方式。以收音機為例進行說明。收音機具有am fm 切換開關 兩種調頻方式和乙個掃瞄按鈕。因此根據收音機的基本狀態 am fm 當調諧到am或fm頻道時,掃瞄按鈕的行為就會動態的改變。con...
python設計模式之狀態模式
狀態模式是一種常用的模式,和名字一樣,可以在呼叫時修改其內部屬性,看起來就像改變了類的狀態 class networkcardstate 基類 defsend self raise notimplementederror defreceive self raise notimplementederr...
Python設計模式之狀態模式
狀態模式和責任鏈模式是真的很像 狀態模式學習鏈結 責任鏈模式和狀態模式對比 usr bin python coding utf8 狀態模式 usr bin env python coding utf 8 author andy 大話設計模式 設計模式 狀態模式 狀態模式 state pattern ...