1、封裝了轉換規則。
2、列舉可能的狀態,在列舉狀態之前需要確定狀態種類。
3、將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。
4、允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊。
5、可以讓多個環境物件共享乙個狀態物件,從而減少系統中物件的個數。
1、狀態模式的使用必然會增加系統類和物件的個數。
2、狀態模式的結構與實現都較為複雜,如果使用不當將導致程式結構和**的混亂。
3、狀態模式對"開閉原則"的支援並不太好,對於可以切換狀態的狀態模式,增加新的狀態類需要修改那些負責狀態轉換的源**,否則無法切換到新增狀態,而且修改某個狀態類的行為也需修改對應類的源**。
1.乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為。
2.乙個操作中含有龐大的多分支結構,並且這些分支決定於物件的狀態。
abstractstate
:抽象狀態
conretestate:具體狀態
context :帶有某個狀態的類
:抽象狀態:
/**conretestate:具體狀態* 設計模式
-狀態模式
-抽象狀態(氣侯狀態)**
這裡抽象人類在不同的氣侯狀態下,人類的行為(所說的話)
** created by laizhiyuan on 2017/6/12.
*/public abstract class abstarctweatherstate
/*** 設計模式
-狀態模式
-具體狀態(春天狀態)
** created by laizhiyuan on 2017/6/12.
*/public class springweatherstate extends abstarctweatherstate
}
/*** 設計模式
-狀態模式
-具體狀態(夏天狀態)
** created by laizhiyuan on 2017/6/12.
*/public class summerweatherstate extends abstarctweatherstate
}
/**context :帶有某個狀態的類* 設計模式
-狀態模式
-具體狀態(秋天狀態)
** created by laizhiyuan on 2017/6/12.
*/public class autumnweatherstate extends abstarctweatherstate
}
/*** 設計模式
-狀態模式
-狀態物件
** created by laizhiyuan on 2017/6/12.
*/public class people
/*** 人類在不同的氣溫狀態下,所說的話
*/public void
request()
}
/*** 測試
設計模式 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...
設計模式 狀態模式
1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...
設計模式 狀態模式
描述 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。通常應用在有好多狀態的流程中。類圖 以下程式模擬糖果機器投幣取糖果的狀態流程。1.定義狀態...