狀態模式替代箭頭型程式碼
所謂“箭頭型程式碼”是指大量巢狀條件導致的過深的程式層次,由於Python
天然依賴縮排區分層級,所以最直接的體現就是一個縮排極誇張的語句塊,導致螢幕寬度“不夠用了”。
箭頭型最大的毒害還不在於必須拖動橫向滾動條才能檢查程式碼(這點按照PEP8的處理方式完全可以避免),而在於過深的巢狀層次導致程式碼邏輯驟然複雜,看到最內層程式碼都不知道哪些條件下會執行這些語句,導致程式碼的可讀性、可維護性降低。
這時引入狀態模式來一定程度上替代“箭頭型程式碼”就非常必要了。所謂狀態模式是指當一個物件內在狀態改變時允許改變其行為,但看起來物件本身像是改變了類。狀態模式通過將一系列複雜的邏輯判斷轉移到不同狀態的類中來簡化邏輯判斷。
簡單來看個例子:
from state import curr, switch, stateful, State, behavior
@stateful
class Me(object):
class WorkDay(State):
default = True
@behavior
def daytime(self):
print 'Work whole day!!!'
class Weekend(State):
@behavior
def daytime(self):
print 'Relax Sleep and Have fun!!!'
felix = Me()
while 1:
for i in range(1, 8):
if i==6:
switch(felix, Me.Weekend)
if i==1:
switch(felix, Me.WorkDay)
felix.day()
簡單說明一下,被@stateful
裝飾器修飾的類的例項本身帶有狀態,可以通過curr()
來查詢,通過switch()
來轉換,而WorkDay
和Weekend
所繼承的State
類帶有__begin__
和__end__
狀態轉換協議(有點類似於上下文語句with
)可以用來處理在狀態進入/離開時的初始化/清理工作。
相關文章
- 箭頭旋轉程式碼
- CSS空心箭頭程式碼例項CSS
- 設計模式--狀態模式State(行為型)設計模式
- canvas繪製箭頭效果程式碼例項Canvas
- 更換select箭頭程式碼例項
- 行為型設計模式 - 狀態模式詳解設計模式
- 箭頭→箭頭 matlab畫圖Matlab
- 狀態模式模式
- setTimeout和箭頭函式巢狀中的this指向函式巢狀
- css三角形箭頭程式碼例項CSS
- 按住滑鼠可以拖動箭頭旋轉程式碼例項
- JavaStatePattern(狀態模式)JavaAST模式
- JS 狀態模式JS模式
- (三)狀態模式模式
- 狀態模式(State)模式
- 設計模式-狀態模式設計模式
- 設計模式:狀態模式設計模式
- 點選左右箭頭可以移動選項例項程式碼
- 箭頭函式函式
- Qt畫箭頭QT
- 行為型模式:狀態模式模式
- 設計模式(十五)狀態模式設計模式
- 設計模式之——狀態模式設計模式
- javascript設計模式狀態模式JavaScript設計模式
- 設計模式(六):狀態模式設計模式
- 狀態變化模式模式
- 狀態模式(State pattern)模式
- 17_狀態模式模式
- 用設計模式去掉沒必要的狀態變數 —— 狀態模式設計模式變數
- HTTP狀態程式碼是什麼?HTTP
- 狀態碼
- 替換預設select下拉選單箭頭程式碼例項
- PHP 設計模式之狀態模式PHP設計模式
- 簡說設計模式——狀態模式設計模式
- 設計模式之狀態模式(State)設計模式
- 設計模式-狀態模式(State Pattern)設計模式
- python設計模式狀態模式Python設計模式
- 設計模式20之狀態模式設計模式