設計模式之狀態模式(State )

2022-02-28 07:35:39 字數 1275 閱讀 9459

狀態模式是根據其狀態變化來改變物件的行為,允許物件根據內部狀態來實現不同的行為。內容類可以具有大量的內部狀態,每當呼叫實現時,就委託給狀態類進行處理。

當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。

class lowstate; //低等折扣

class mediastate; //中等折扣

class highstate; //高等折扣

//折扣

class discount

~discount()

void request()

void setstate(state* sta)

int getbuynum()

void setbuynum(int nnum)

private:

state* m_state;

int m_nbuynum;

};//執行系統

class state

;class lowstate : public state

else

}}

};class mediastate : public state

else if (nnum>10 && nnum <=50)

else}}

};class highstate : public state

else}}

};int main()

狀態模式裡可以看到策略模式和責任鏈模式的影子,從結構和功能上會有些相似;

策略模式和狀態模式最為相像,其二者主要區別是策略模式更關心的是strategy的型別多型實現,一般會在外部呼叫時進行指明;而狀態模式不會直接決定state的具體實現,而是通過內部狀態引數來決定。

責任鏈模式由前後的鏈條關係,在建立時需要明確指出,而狀態模式是由狀態選擇其多型的實現。

所以狀態模式之所以單獨獨立出來,就是為了凸顯在不同狀態下的不同實現。

這篇電梯的實現很形象,大家可以參考電梯應用

乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為。

乙個操作中含有龐大的多分支結構,並且這些分支決定於物件的狀態。

設計模式 狀態模式(State)

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

設計模式 狀態模式(State)

一 狀態模式 state 定義 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類 理解 狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。二 狀態模式uml圖 3 context ...

設計模式 狀態模式State

允許乙個物件在內部改變它的狀態,並根據不同的狀態有不同的操作行為。例如,水在固體 液體 氣體是三種狀態,但是展現在我們面前的確實不同的感覺。通過改變水的狀態,就可以更改它的展現方式。應用場景 1 當乙個物件的行為,取決於它的狀態時 2 當類結構中存在大量的分支,並且每個分支內部的動作抽象相同,可以當...