設計模式 狀態模式

2021-10-02 17:30:46 字數 920 閱讀 7732

定義:允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類,是一種物件行為模式。個人理解是有乙個物件,有多種狀態,每種狀態下行為不一樣,而且狀態之間是可以切換的。比如在這是我的戰爭中,乙個人如果長期不吃飯,其飢餓狀態會有不同顯示:飽足、飢餓、非常飢餓以及餓的要死;如果身體不舒適,也會有生病、重病等多種模式,在每種模式下都會影響人物的移動速度以及心情。如果採用一般的設計,需要乙個通用的字段表示當前狀態,然後通過if else進行判斷當前狀態來實現對應的動作。而狀態模式則解決這種問題,把狀態的判斷的邏輯轉移到表示不同狀態的類中,簡化判斷邏輯。也就是利用多型消除if else的判斷。其重要有三個主要的角色:

接下來,以這是我的戰爭中不同飢餓狀態對人物移動速影響為例。

首先定義乙個基礎的狀態介面:

public inte***ce state
定義乙個飽足的狀態:

public class normalstate implements state 

}

再定義乙個飢餓狀態

public class hungerystate implements state 

}

最後定義乙個非常飢餓狀態

public class veryhungerystate implements state 

}

最後設計人物類,也就是context,擁有state物件:

public class person 

public void setstate(state state)

public person(state state)

public void action()

}

測試:

public static  void main(string args)

缺點:

設計模式 狀態模式

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

設計模式 狀態模式

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

設計模式 狀態模式

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