是乙個用來對狀態轉換進行建模的工具,是乙個抽象的機器。有著兩個非常關鍵的部分,狀態和轉換。狀態是指系統當前的狀態。轉換是指從乙個狀態切換到另乙個狀態,因某乙個事件或者條件的觸發而開始。通常,在一次轉換發生之前或者之後,會執行一組動作。
我們經常使用狀態圖來表示狀態機。其中,每乙個狀態是乙個節點,每一次轉換就是兩個節點之間的邊。
是指使用乙個狀態機來解決特定領域的問題。因此所有需要使用狀態機來解決的問題都可以使用狀態模式。而其中事件驅動系統是狀態機使用較為頻繁的場景。乙個狀態在切換到另乙個狀態後會觸發乙個事件或者訊息。
為了避免重複製造輪子,利用python中已經有的模組。state_machine 就是乙個非常好用的模組。
下面給出乙個關於程序(process)的狀態機實現**
@acts_as_state_machine
class
process
:# 建立process可以具備的狀態
created = state(initial=
true
) waiting = state(
) running = state(
) terminated = state(
)# 建立可以觸發狀態轉換的事件
wait = event(from_states=
(created, running)
, to_state=waiting)
run = event(from_states=waiting, to_state = running)
def__init__
(self, name)
; self.name = name
# 定義一些方法用於在進入狀態或者離開狀態時候執行
@after(
'wait'
)def
wait_info
(self)
:print
("enter wait mode")
@before(
'terminate'
)def
terminate_info
(self)
:print
("enter terminate mode"
)def
transition
(process, event, event_name)
:# 定義方法來觸發一些event從而產生狀態轉移
try:
event(
)except invalidstatetransition as err:
print
("error, can't transit the status"
)
通過使用狀態機,我們避免使用冗長易錯的if-else 語句來檢查每次狀態轉換,並根據轉換做出反應。因此在以後需要用到大量條件語句或者涉及狀態轉換的地方,我們都希望使用狀態機來對系統進行建模。 行為型模式 狀態模式
在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。在狀態模式中,我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。意圖 允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類。主要解決 物件的行...
(行為型模式)State 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式允許乙個物件在其內部狀態改變的時候改變行為。這個物件看上去像是改變了它的類一樣。狀態模式把所研究的物件的行為包裝在不同的狀態物件裡,每乙個狀態物件都屬於乙個抽象狀態類的乙個子類。狀態模式的意圖是讓乙個物件在其內...
行為型模式之 狀態模式
狀態模式 state pattern 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。何時使用 中包含大量與物件狀態有關的條件語句。如何解決 將各種具體的狀態類抽象出來。關鍵 通常命令模式的...