《head first 設計模式》中的樣例非常不錯,想製造乙個自己主動交易的糖果機,糖果機有四個狀態:投入錢不足,投入錢足夠,**糖果,糖果售罄。
糖果機的當前狀態處於當中不同的狀態時,它針對同乙個操作的反映動作也不同。
傳統面向過程程式設計會套用if-else對不同的狀態下分別處理,邏輯麻煩並且不具有可拓展性。
狀態模式:同意乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎改動了它的類。
狀態模式的重點在於狀態轉換,非常多時候。對於乙個物件的狀態,我們都是讓這個物件包括乙個狀態的屬性,這個狀態屬性記錄著物件的詳細狀態,依據狀態的不同使用分支結構來執行不同的功能。就像上面的**那樣處理。就像上面說的。類中存在大量的結構類似的分支語句,變得難以維護和理解。狀態模式消除了分支語句。就像工廠模式消除了簡單工廠模式的分支語句一樣,將狀態處理分散到各個狀態子類中去。每乙個子類集中處理一種狀態,這樣就使得狀態的處理和轉換清晰明白
state類,抽象狀態類,定義乙個介面以封裝與context的乙個特定狀態相關的行為。
concretestate類,詳細狀態,每個子類實現乙個與context的乙個狀態相關的行為。
context類,維護乙個concretestate子類的例項。這個例項定義當前的狀態。
給出框架。不再實現,比較好理解。
class context;
class state
;class concretestatea : public state
;class concretestateb : public state
;class concretestatec : public state
;class context
;
C 設計模式 狀態模式(State)
允許乙個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。23種設計模式不比太過於計較它們之間的差異,而更關注他們到底解決的是什麼樣的乙個穩定點和變化點的關係問題。這個時候呢模式之間的關係也理順了,學習模式一那麼生搬硬套,它無非是設計上的演化而已,是一種松耦合設計的原則演化而已。...
C 設計模式 狀態(State)
允許乙個物件在其內部狀態改變時改變它的行為。主要組成 context 環境,上下文,客戶主要使用該類 state 狀態父類或介面 concretestate 具體狀態 using system namespace state public void changestate state state p...
設計模式 狀態模式(State)
核心思想就是 當物件的狀態改變時,同時改變其行為。所以,狀態模式就兩點 1 可以通過改變狀態來獲得不同的行為。2 你的好友能同時看到你的變化。state類是個狀態類 這裡用dispenserstate 及實現類 public inte ce dispenserstate public class f...