State設計模式

2021-10-05 12:11:40 字數 1216 閱讀 4691

最近做實驗時用到了state設計模式,雖然老師說state設計模式要到以後講,但通過自學我已經基本明白其要點,不妨在此寫一些東西。
我們知道,軟體在執行過程中,會產生很多的狀態,狀態就是指軟體所處的某一種相對穩定的形式,在這裡我要解釋清楚它和軟體基線的區別。軟體的基線是指軟體本身所處的相對穩定的形式,是整體性的穩定,而狀態是指軟體的某一部分在執行過程中所處的相對穩定狀態,是區域性的穩定。之所以要設計狀態模式,是因為在很多情況下,不同的狀態對應的操作不同。對於分情況討論的問題,在結構化程式設計中,我們通常採用if-else語句或switch語句進行處理。但是這樣書寫對於**的修改很不利,如果某一處需要修改,很有可能會引起大改,正所謂「牽一髮而動全身」。同時,程式的可讀性,擴充套件性也會變得很弱。維護也會很麻煩。因此,在物件導向程式設計中,我們採用狀態設計模式以規避這種弱點。

狀態設計模式的主要思想是將每乙個狀態都設定成類,對於不同的類定義不同的操作,包括該狀態下的處理以及狀態之間的轉換等。在呼叫時,我們不需要使用條件處理語句,而是根據需要呼叫不同的狀態對應的類來實現,這樣就大大增加了程式的可讀性和可擴充套件性,同時,因為狀態對應的類之間耦合程度很低,僅在狀態變換時進行耦合,因此在修改狀態時我們只需要修改需要修改的狀態對應的類,而不涉及其他的類,這樣就大大降低了修改狀態需要的工作量,避免「牽一髮而動全身」的情況出現。

狀態設計模式主要分為三大部分:狀態介面,環境變數,具體狀態。狀態介面定義了與使用者所需要的狀態相關聯的行為,環境變數用於定義客戶程式需要的介面,並且維護乙個具體狀態的例項,具體狀態實現了狀態介面所定義的操作。下面我們就來解釋一下上述三大部分。狀態介面定義的不是狀態,定義的是所有的狀態通用的行為。注意,在狀態設計模式中,所有的狀態都是直接設計成類,不存在其他形式。比如定義乙個機器,它可以顯示當前所處的狀態並轉換到下乙個狀態,那麼我們就把顯示和轉換兩種操作定義在狀態介面內部。具體狀態就是每乙個具體的狀態,我們知道,使用狀態設計模式的前提就是不同的狀態對應不同的操作,具體狀態的作用就是體現這種不同。我們可以把不同的操作定義在具體狀態類內,作為轉換的物件,例如對於上面的機器,相同的介面可以有不同的實現,不同的實現就應該放在具體類內。特別要注意的是,狀態設計模式中具體模式之間一般會形成乙個封閉系統。環境變數的作用最為特殊也最難解釋。簡單來說,環境變數的主要作用就是呼叫具體狀態類實現操作。將狀態作為環境變數類的屬性,在環境變數類內實現狀態介面的操作。注意:環境變數的主要作用是實現狀態介面中的操作,而具體狀態中的操作通過環境變數實現。總結起來就是:狀態介面定義操作,環境變數實現操作,具體狀態通過呼叫環境介面實現操作的變化。

設計模式之State模式

state模式類似於switch的多路分鐘功能 狀態模式的ulm圖 狀態模式用於改變目標物件的行為方式,隨著狀態變化目標程式從乙個轉到另乙個目標程式。package state public class creature private class forg implements state pri...

設計模式之state模式

狀態模式 state pattern 允許乙個物件在其內部狀態改變時改變它的行為。適用場景 一 乙個物件的行為取決於他的狀態,並且它必須在執行時根據狀態改變它 的行為 二 乙個操作中含有龐大的多分支條件語句,並且這些分支依賴於該物件的 狀態。優缺點 狀態模式的主要優點在於封裝了轉換規則,其缺點在於使...

設計模式 狀態模式(State)

核心思想就是 當物件的狀態改變時,同時改變其行為。所以,狀態模式就兩點 1 可以通過改變狀態來獲得不同的行為。2 你的好友能同時看到你的變化。state類是個狀態類 這裡用dispenserstate 及實現類 public inte ce dispenserstate public class f...