1. 程式人生 > 實用技巧 >設計模式-狀態模式

設計模式-狀態模式

我們還是通過一個案例來引出狀態模式

案例:

APP 抽獎活動問題 請編寫程式完成 APP 抽獎活動 具 體要求如下:
  • 1) 假如每參加一次這個活動要 扣除使用者50積分,中獎概率 是10%
  • 2) 獎品數量固定,抽完就不能 抽獎
  • 3) 活動有四個狀態: 可以抽獎、 不能抽獎、發放獎品和獎品 領完
  • 4) 活動的四個狀態轉換關係圖 (下圖)

狀態模式基本介紹: 1) 狀態模式(State Pattern):它主要用來解決物件在多種狀態轉換時,需要對外 輸出不同的行為的問題。狀態和行為是一一對應的,狀態之間可以相互轉換 2) 當一個物件的內在狀態改變時,允許改變其行為,這個物件看起來像是改變了 其類

3)UML原理圖

對原理類圖的說明-即(狀態模式的角色及職責) 1) Context 類為環境角色, 用於維護State例項,這個例項定義當前狀態 2) AbstractStatus是抽象狀態角色,定義一個介面封裝與Context 的一個特點介面相關行為 3) Status1, Status2具體的狀態角色,每個子類實現一個與Context 的一個狀態相關行為

這個就是狀態模式,就是用來 記錄狀態的變化並讓物件根據不同的狀態,產生不同的行為的,這個案例 根據這個 原理類圖套一套就可以了,是不是非常的容易。

狀態模式的注意事項和細節 1) 程式碼有很強的可讀性。狀態模式將每個狀態的行為封裝到對應的一個類中
2) 方便維護。將容易產生問題的if-else語句刪除了,如果把每個狀態的行為都放到一 個類中,每次呼叫方法時都要判斷當前是什麼狀態,不但會產出很多if-else語句, 而且容易出錯 3) 符合“開閉原則”。容易增刪狀態 4) 會產生很多類。每個狀態都要一個對應的類,當狀態過多時會產生很多類,加大維 護難度 5) 應用場景:當一個事件或者物件有很多種狀態,狀態之間會相互轉換,對不同的狀 態要求有不同的行為的時候,可以考慮使用狀態模式