24 狀態模式

2021-09-12 21:48:05 字數 1141 閱讀 7296

狀態模式允許通過改變物件內部的狀態而改變其行為,此時這個物件表現得就像修改了它的類一樣。狀態模式把所研究的物件的行為包裝在不同的狀態物件裡,每個狀態物件都屬於乙個抽象狀態類的乙個子類,當物件的狀態發生變化時,物件便改變其所選的子類,從而達到修改其行為的目的。

優點:1、封裝了轉換規則。 2、列舉可能的狀態,在列舉狀態之前需要確定狀態種類。 3、將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。 4、允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊。 5、可以讓多個環境物件共享乙個狀態物件,從而減少系統中物件的個數。

缺點:1、狀態模式的使用必然會增加系統類和物件的個數。 2、狀態模式的結構與實現都較為複雜,如果使用不當將導致程式結構和**的混亂。 3、狀態模式對"開閉原則"的支援並不太好,對於可以切換狀態的狀態模式,增加新的狀態類需要修改那些負責狀態轉換的源**,否則無法切換到新增狀態,而且修改某個狀態類的行為也需修改對應類的源**。

類圖如下:

示例**如下:

#include #include #include using namespace std;

class work;

class state;

class forenonnstate;

class state

;class work

};class eveningstate:public state

else

}};class forenonnstate :public state

else

}};work::work()

int main()

執行結果如下:

24種設計模式 狀態模式

當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,可考慮用到狀態模式 include stdafx.h include using namespace std class job class afternoon state class night state class n...

執行緒狀態 Day24

執行緒狀態概述 timed waiting在api中的描述為 乙個正在限時等待另乙個執行緒執行乙個 喚醒 動作的執行緒處於這一狀態 在我們寫賣票的案例中,為了減少執行緒執行太快,現象不明顯等問題,我們在run方法中新增了sleep語句,這樣就 強制當前正在執行的執行緒休眠 暫停執行 以 減慢執行緒 ...

設計模式 狀態模式

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