1. 程式人生 > 其它 >設計模式 ——狀態模式

設計模式 ——狀態模式

“狀態變化”模式

在元件構建過程中,某些物件的狀態經常面臨變化,如何對這些變化進行有效的管理?同時又維持高層模組的穩定?“狀態變化”模式應運而生。
典型模式 :State、 Memento

State 狀態模式

在實際開發中,經常會遇到,一個物件有多種狀態,在每一個狀態下,都有不同的行為。如下:



enum NetworkState {
 Network_Open,
 Network_Close,
 Network_Con


public void Operation2() { if (state == Network_Open) { //**********
state = Network_Connect; } else if (state == Network_Close) { //..... state = Network_Open; } else if (state == Network_Connect) { //$$$$$$$$$$ state = Network_Close; } }
public void Operation3() {} };

每當新增狀態時,就需要修改原來的程式碼,違反“開閉原則”,而且大量的分支結構,使得程式碼難以理解與維護。

動機

  • 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化,比如文件處於只讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。
  • 如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉換之間引入緊耦合?

定義
允許一個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。  ——《設計模式》GOF

有了狀態模式之後,可以解決隨著狀態增加而出現的多分支結構,將狀態處理分散到各個狀態子類中去,每個子類處理一種狀態,因而使得狀態的處理和轉換變得清晰明確。

結構

狀態相關的操作全部編碼到一個狀態物件裡,