設計模式 狀態模式

2021-10-04 13:02:35 字數 841 閱讀 5409

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

state抽象狀態角色。介面或者抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換。

concretestate具體狀態角色。有兩個職責:本狀態的行為管理以及趨向狀態處理。本狀態下要做的事情,以及本狀態如何過渡到其他狀態。

context環境角色。定義客戶端需要的介面,並且負責具體狀態的切換。

環境角色兩個不成文的約束:

把狀態物件宣告為靜態常量,有幾個狀態物件就宣告幾個靜態常量

環境角色具有狀態抽象角色定義的所有行為,具體執行使用委託方式

結構清晰。避免過多的switch…case或if…else的使用,提高可維護性

遵循設計原則。很好體現了開閉原則和單一職責原則,每個狀態都是乙個子類,需要增加狀態就要增加子類,修改狀態也只修改乙個子類就可以了

封裝性非常好。狀態模式的基本要求,狀態變換放置到類的內部來實現,外部的呼叫不用知道類內如何實現狀態和行為的變換

子類太多,造成類膨脹。

行為隨狀態改變而改變的場景。例如許可權設計。

條件、分支判斷語句的替代者

狀態模式適用於當某個物件在它的狀態發生改變時,它的行為也隨著發生比較大的變化,也就是說在行為受狀態約束的情況下可以使用狀態模式,物件的狀態最好不要超過5個。

狀態約束的情況下可以使用狀態模式,物件的狀態最好不要超過5個。

《設計模式之禪》

設計模式 狀態模式

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

設計模式 狀態模式

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

設計模式 狀態模式

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