設計模式 ——狀態模式
阿新 • • 發佈:2021-11-03
“狀態變化”模式
在元件構建過程中,某些物件的狀態經常面臨變化,如何對這些變化進行有效的管理?同時又維持高層模組的穩定?“狀態變化”模式應運而生。
典型模式 :State、 Memento
State 狀態模式
在實際開發中,經常會遇到,一個物件有多種狀態,在每一個狀態下,都有不同的行為。如下:
enum NetworkState { Network_Open, Network_Close, Network_Conpublic void Operation2() { if (state == Network_Open) { //**********
public void Operation3() {} };
每當新增狀態時,就需要修改原來的程式碼,違反“開閉原則”,而且大量的分支結構,使得程式碼難以理解與維護。
動機
- 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化,比如文件處於只讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。
- 如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉換之間引入緊耦合?
定義
允許一個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。 ——《設計模式》GOF
有了狀態模式之後,可以解決隨著狀態增加而出現的多分支結構,將狀態處理分散到各個狀態子類中去,每個子類處理一種狀態,因而使得狀態的處理和轉換變得清晰明確。
結構
狀態相關的操作全部編碼到一個狀態物件裡,