【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号