【Java】23種設計模式——20.狀態模式
定義
狀態模式(State Pattern)是一種行為設計模式,它允許對象在其內部狀態改變時改變其行為,使對象看起來似乎修改了它的類。
角色
- Context(上下文):維護當前狀態,并將請求委托給當前狀態對象
- State(狀態接口):定義狀態行為的接口
- ConcreteState(具體狀態):實現特定狀態下的行為
應用場景
- 對象的行為取決于它的狀態,并且必須在運行時根據狀態改變行為
- 需要大量條件語句來判斷不同狀態下的行為
- 需要實現狀態轉換邏輯
- 需要清晰管理狀態轉換的場景(如工作流引擎)
使用
-
上下文
/** * 狀態模式:上下文 * @Author:lyj * @Date:2025/5/22 10:17 */ public class Context { private State currentState ; public Context(State state) { this.currentState = state; } /** * 設置狀態 * @param state 狀態 */ public void setState(State state) { this.currentState = state; } /** * 請求狀態 */ public void request() { currentState.handle(this); } } -
狀態接口
/** * 狀態模式:狀態接口 * @Author:lyj * @Date:2025/5/22 10:14 */ public interface State { /** * 狀態處理 */ public void handle(Context context); } -
具體狀態
/**
* 狀態模式:具體狀態A
* @Author:lyj
* @Date:2025/5/22 10:22
*/
public class ConcreteStateA implements State {
@Override
public void handle(Context context) {
System.out.println("當前狀態A,將切換到狀態B");
context.setState(new ConcreteStateB());
}
}
/**
* 狀態模式:具體狀態B
* @Author:lyj
* @Date:2025/5/22 10:24
*/
public class ConcreteStateB implements State{
@Override
public void handle(Context context) {
System.out.println("當前狀態B,將切換到狀態A");
context.setState(new ConcreteStateA());
}
}
運行客戶端:
Context context = new Context(new ConcreteStateA());
// 多次請求觀察狀態變化
context.request(); // A→B
context.request(); // B→A
context.request(); // A→B
運行結果:

有志者,事竟成,破釜沉舟,百二秦關終屬楚; 苦心人,天不負,臥薪嘗膽,三千越甲可吞吳。

浙公網安備 33010602011771號