狀態模式

將事物的每個狀態的行為放入各自的類中,每個狀態實現自己的動作;
當事物發生動作時,通過動作委托到狀態類;

好處:

  1. 事物每個狀態的行為局部化到它自己的類中;
  2. 可將事物類中各種狀態剔除掉,利于維護;
  3. 狀態對 “修改關閉”,事物類,對擴展開放;

狀態模式的定義:
狀態模式允許對象在內部狀態改變時改變它的行為,對象看起來好像修改他的類;

類圖

Paste_Image.png
  1. context上下文對象:用于一些內部狀態,分別用來表示上下文對象的各種狀態;
  2. State:所有具體狀態類的基類,State接口定義了所有具體狀態的共同接口;
    這樣一來,context中的當前狀態之間就可以相互替換;
  3. ConcreteStateA: 具體狀態類,處理來自Context中的請求,當context改變狀態時,實際上,調用的不同狀態對象中的方法,這樣就實現了 context 的狀態切換了;

與策略模式對比:
意圖不同

  1. 狀態模式,將一群行為封裝在狀態對象中,context的行為可隨時委托到一群狀態對象中的一個,隨著程序運行,當前狀態在狀態對象集合中游走改變,用來反映出context內部的狀態,這樣context的行為也跟著變化(因為context的行為通過狀態來表示了嘛),但context的客戶并不需要考慮context內部是如何工作的;
  2. 策略模式,客戶主動指定Context所要組合的策略對象是哪一個,對于context來說,通常只有一個最合適的策略對象;

一般下,我們把策略模式想象成 除了繼承之外的一種彈性替代方案;
我們把狀態模式想成是不用在context中放置許多條件判斷的替代方案;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容