今天大風大雨, 但心情還行, 繼續擼DOTA 狀態模式(state pattern)定義 當一個對象的內在狀態改變時允許改變其行為, 這個對象看起來像是改變了其類 這在我們開發的業務中太常見了, 角色許可權的管理, 給予不同的許可權, 不同角色的操作就會發生改變 該類圖中包含三個角色 Context: ...
狀態模式(state pattern)定義
當一個對象的內在狀態改變時允許改變其行為, 這個對象看起來像是改變了其類
這在我們開發的業務中太常見了, 角色許可權的管理, 給予不同的許可權, 不同角色的操作就會發生改變
該類圖中包含三個角色
- Context: 包含狀態的對象, 根據這些狀態進行響應
- State: 狀態介面, 定義狀態
- ConreteState: 具體的狀態, 並且實施對應狀態的行為
狀態模式解決的問題
- 當控制一個對象狀態的條件表達式過於複雜時的情況. 把狀態的判斷邏輯轉移到表示不同狀態的一系列類中, 可以把複雜的判斷邏輯簡化
- 提到狀態 我們的代碼中可能有各種 狀態的判斷使用的是if else 要是只是少量沒必要使用狀態模式, 但是要是很多呢, 那就使用狀態模式吧
- 使用多態代替了條件的判斷, 這樣我們代碼的擴展性更加的強, 要加一些狀態, 可以直接創建
- 狀態是可以被共用的, 在世紀的開發中我們會經常定義一些CommontStatus類, 表示的一些常量
- 狀態被管理者, 我們只需要關註一個固定的狀態到其他狀態的轉換
- 安全, 如上, 我們設置狀態時, 必須是介面的實現類, 而不是一些整數, 這樣可以杜絕魔數(莫名其妙的數字, 比如status == 1 哈哈)
總結: 狀態模式適用某一個對象的行為取決於該對象的狀態, 並且該對象的狀態在運行時的轉換, 又或者有很多的判斷, 而這些判斷只是因為某個不同而不斷的切換(該判斷下的對象的實現複雜的情況下)