State Pattern
核心思維就是一個事件(物件)有多種狀態,在不同的狀態下所表現出來的行為和屬性不一樣。
狀態模式又稱為物件的行為模式。
我們可以把決定狀態變化的屬性,單獨抽象成一個類別StateInfo,這樣判斷狀態屬性是否符合當前的狀態IsMatch時就可以傳入更多的資訊。
優點
- 封裝了狀態的轉換規則,在狀態模式中可以將狀態的轉換程式碼封裝在環境類別中,對狀態轉換程式碼進行集中管理,而不是分在一個個業務邏輯中。
- 將所有與某個狀態有關的行為放到一個類別中(稱為狀態類別),使開發人員可以專注於該狀態下的邏輯開發。
- 允許狀態轉換邏輯與狀態物件合為一體,使用時只需要注入一個不同的狀態物件即可使環境物件擁有不同的行為。
缺點
- 會增加系統類別和物件的個數。
- 狀態模式的結構與實現都較為複雜,如果使用不當容易導致程式結構和程式碼的混亂。
使用情境
- 一個物件的行為取決於他的狀態,並且他在運行時可能經常改變他的狀態,從而改變他的行為。
- 一個操作中含有龐大的多分支的條件陳述式,這些分支依賴於該物件的狀態,且每一個分支的業務邏輯都非常複雜時,我們可以使用狀態模式來拆分不同的分支邏輯,使程式有更好的可讀性和可維護性。
note
來源: Python 設計模式 - 羅偉富