23.狀態模式
Java中的狀態設計模式是一種軟件設計模式,當對象的內部狀態更改時,該模式允許對象更改其行為。狀態設計模式通常用于以下情況:對象取決于其狀態,并且在運行期間必須根據其內部狀態更改其行為。狀態設計模式是許多行為設計模式之一,因此表征了運行時難以遵循的對象之間的控制流。狀態封裝是管理軟件變更的絕佳方法。在本文中,我們將討論狀態設計模式動機的關鍵方面,描述狀態動機,提及實現該動機的關鍵參與者,并使用代碼示例來演示其用法。
Java中的狀態設計模式示例
在繼續演示Java狀態設計模式的代碼示例之前,讓我們首先了解什么是我們需要更好理解示例的關鍵類(參與者)。
上下文界面
上下文定義一個接口,該接口維護定義當前狀態的ConcreteState子類的實例。
狀態界面
狀態定義了一個接口,用于封裝與上下文的特定狀態關聯的行為。
ConcreteState子類
如前所述,具體狀態子類可以被視為連接對象處于(建立,聆聽或關閉)狀態的實例。它們實現了上下文狀態的行為。
Java示例中的狀態設計模式
我們將演示游戲開始和暫停功能的高度簡化版本。實現如下:
UML用例圖
1、狀態界面
public interface State {void doAction(Context context);
}
2.上下文
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Context {private State state;}
3.具體狀態
public class StartState implements State {@Overridepublic void doAction(Context context) {System.out.println("Game start");context.setState(this);}public String toString(){return "start";}
}public class StopState implements State {@Overridepublic void doAction(Context context) {System.out.println("Game pause");context.setState(this);}public String toString(){return "stop";}}
4.測試類
public class StateTest {public static void main(String[] args) {Context context = new Context();StartState startState = new StartState();startState.doAction(context);System.out.println(context.getState().toString());StopState stopState = new StopState();stopState.doAction(context);System.out.println(context.getState().toString());}
}