設計模式 狀態模式

2021-07-26 14:31:15 字數 887 閱讀 6671

狀態(state)模式:允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的狀態。

state:狀態,定義抽象介面;

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

context:定義客戶感興趣的介面,維護乙個concretestate子類的例項,這個例項定義為當前狀態;

適用性:

(1)乙個物件的行為取決於它的狀態,並且它必須在允許時刻根據狀態改變它的行為;

(2)乙個操作有大量多分支的條件語句,且分支依賴於物件的狀態。這個狀態通常用乙個或多個列舉常量表示;

優點:(1)將所有與乙個特定狀態相關的行為放入乙個類中,把不同的狀態分割開來,使得增加新的狀態很方便;

(2)使的狀態的轉換更加清晰;

(3)當state物件沒有例項變數時,context物件可以共享乙個state物件;

缺點:狀態過多,會造成大量子類不方便管理

實現:(1)為了讓轉換更靈活,

context中需要增加乙個介面changestate,讓state物件轉換當前狀態。缺點是乙個state中包含其他state,造成了各個子類的依賴;

(2)可以使用表將每乙個可能的輸入對映到乙個後繼狀態,這種方法將條件**對映到乙個查詢表。缺點是效率低,可讀性差,傳入引數不方便;

(3)context可以將自身作為乙個引數傳遞給處理該請求的狀態物件,讓狀態物件在方便時可以訪問context;

(4)當進入狀態在執行時不可知時,並且不經常變更狀態時,選擇需要state物件時才建立並隨後銷毀;當state物件儲存大量資訊,並且狀態改變很頻繁時,應該預先建立並且始終不銷毀它們;

設計模式 狀態模式

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

設計模式 狀態模式

1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...

設計模式 狀態模式

描述 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。通常應用在有好多狀態的流程中。類圖 以下程式模擬糖果機器投幣取糖果的狀態流程。1.定義狀態...