定義
允許對象在內部狀態改變時改變它的行爲,對象看起來好像修改了它的類。
角色
Context: 環境類。可以包括一些內部狀態。
State: 抽象狀態類。State定義了一個所有具體狀態的共同接口,任何狀態都實現這個相同的接口,這樣一來,狀態之間就可以互相轉換了。
ConcreteState: 具體狀態類。具體狀態類,用於處理來自Context的請求,每一個ConcreteState都提供了它對自己請求的實現,所以,當Context改變狀態時行爲也會跟着改變
適用場景
1、對象的行爲依賴於它的狀態(屬性)並且可以根據它的狀態改變而改變它的相關行爲。
2、代碼中包含大量與對象狀態有關的條件語句
類圖
示例
糖果機的處理
引申
模板方法模式:有子類決定如何實現算法中的某些步驟
狀態模式:封裝基於狀態的行爲,並將行爲委託到當前狀態
策略模式:將可以互換的行爲封裝其來,然後使用委託的方法,決定使用哪一個行爲