(行為型模式)State 狀態模式

2022-07-04 06:00:12 字數 889 閱讀 8596

狀態模式:當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。

狀態模式允許乙個物件在其內部狀態改變的時候改變行為。這個物件看上去像是改變了它的類一樣。狀態模式把所研究的物件的行為包裝在不同的狀態物件裡,每乙個狀態物件都屬於乙個抽象狀態類的乙個子類。狀態模式的意圖是讓乙個物件在其內部狀態改變的時候,其行為也隨之改變。狀態模式需要對每乙個系統可能取得的狀態創立乙個狀態類的子類。當系統的狀態變化時,系統便改變所選的子類。

狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。

狀態模式的好處是將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來。

即:將特定的狀態相關的行為都放入乙個物件中,由於所有與狀態相關的**都存在於某個concretestate中,所以通過定義新的子類可以很容易地增加新的狀態和轉換。

消除了龐大的條件分支語句,並且通過把各種狀態轉移邏輯分布到state的子類之間,來減少相互間的依賴。

當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,可考慮用到狀態模式。

state類,抽象狀態類,定義乙個介面以封裝與context的乙個特定狀態相關的行為。

concretestate類,具體狀態,每乙個子類實現乙個與context的乙個狀態相關的行為。

context類,維護乙個concretestate子類的例項,這個例項定義當前的狀態。

行為型模式 8 狀態模式State

在很多情況下我們物件的行為依賴於它的乙個或者多個變化的屬性,這些可變的屬性我們稱之為狀態,也就是說行為依賴狀態,即當該物件因為在外部的互動而導致他的狀態發生變化,從而它的行為也會做出相應的變化。對於這種情況,我們是不能用行為來控制狀態的變化,而應該站在狀態的角度來思考行為,即是什麼狀態就要做出什麼樣...

22 State 狀態(行為型模式)

問題的提出 物件狀態影響物件行為。物件擁有不同的狀態,往往會行使不同的行為 動機 motivation 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化,比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為...

設計模式 行為型模式 State模式

允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類 何時使用 中包含大量與物件狀態有關的條件語句 如何解決 將各種具體的狀態類抽象出來 關鍵 狀態模式的介面中有乙個或者多個方法 缺點 注意事項 在行為受狀態約束的時候使用狀態模式,而且狀態不超過 5 個 state.hpp ifnd...