狀態模式(state pattern)
狀態模式(state pattern):屬於對象的行爲型模式。又叫狀態對象模式(pattern of objects for state);當一個對象的內在狀態改變時,允許改變其行爲,這個對象看起來像是改變其了類。
狀態模式UML圖
狀態模式涉及的角色
抽象狀態(State)角色:定義一個接口,用以封裝環境(Context)對象的一個特定的狀態相關的行爲。環境(Context)角色:維護一個具體狀態(ConcreteState)實例,這個實例定義當前的狀態。具體狀態(ConcreteState)角色:每一個具體狀態(ConcreteState)實例都實現了與環境(Context)對象的一個狀態相關的行爲。
示例代碼
抽象狀態類 State
環境類 Context
具體狀態類A ConcreteStateA
具體狀態類B ConcreteStateB
*客戶端測試類 *點擊打開鏈接
狀態模式的優點
-
狀態模式將與特定狀態相關的行爲局部化,並且將不同狀態的行爲分割開來。也就是說可以將特定的狀態相關的行爲都放入一個對象中,由於所有與狀態相關的代碼都存在於某個 ConcreteState 中,所以通過定義新的子類可以很容易地增加行的狀態和轉換。這樣可以消除龐大的條件分支語句。
-
狀態模式通過把各種狀態轉移邏輯分佈到 State 的子類之間,來減少相互間的依賴。
狀態模式使用場景
當一個對象的行爲取決於它的狀態,並且它必須在運行時刻根據狀態改變它的行爲時,就可以考慮使用狀態模式了。
每晚8:00燭光學院的講師將會在騰訊課堂燭光學院Java高級免費試聽課程中給大家詳細講解Java設計模式呦
Java學習資料獲取(複製下段連接至瀏覽器即可)
data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==
漫談JAVA中的各種鎖以及最優的zookeeper分佈式鎖解決方案(視頻)