gof《設計模式》中給狀態模式下的定義為:允許乙個物件在其內部狀態改變時改變它
的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大——居然能夠「修改自身的類」!
能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if else 語句來進行**響應選擇。但是這種方法對於複雜一點的狀態判斷,就會顯得雜亂無章,容易產生錯誤;而且增加乙個新的狀態將會帶來大量的修改。這個時候「能夠修改自身」的狀態模式的引入也許是個不錯的主意。
狀態模式可以有效的替換充滿在程式中的 if else 語句:狀態模式消除了分支語句,就像工廠模式消除了簡單工廠模式的分支語句一樣,將狀態處理分散到各個狀態子類中去,每個子類集中處理一種狀態,這樣就使得狀態的處理和轉換清晰明確。
來看一下狀態模式的角色組成吧:
1)使用環境( context)角色:客戶程式是通過它來滿足自己的需求。它定義了客戶程式
需要的介面;並且維護乙個具體狀態角色的例項,這個例項來決定當前的狀態。
3) 具體狀態( concrete state)角色:實現狀態角色定義的介面。
#include using namespace std;
//使用環境角色:客戶程式是通過它來滿足自己的需求。它定義了客戶程式需要的介面;並且維護乙個具體狀態角色的例項,這個例項來決定當前的狀態。
class context;
class state
;//具體狀態( concrete state)角色:實現狀態角色定義的介面。
class concretestatea : public state
} void changestate(state *pstate)
private:
state *m_pstate;//維護乙個具體狀態角色的例項,這個例項來決定當前的狀態
};int main()
狀態模式總的來說是非常好理解的;沒有多麼深奧的時序關係,就是簡單的將物件的狀態和對應狀態下的行為分離開來,不再是簡單的if…else或switch…case分支結構了,而是每乙個狀態都對應乙個類,乙個類集中管理乙個狀態;在多狀態的情況下,簡化了程式的維護和管理,讓程式結構簡明化,同時也易於擴充套件。
設計模式之狀態模式
一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...
設計模式之狀態模式
定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...
設計模式之狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷簡單化。public abstract class state public cl...