状态模式
基础概念
什么是状态模式?
答案: 状态模式(State Pattern)允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
使用场景:
- 对象的行为依赖于它的状态
- 代码中包含大量与状态有关的条件语句
优点:
- 封装状态转换规则
- 将状态转换显式化
- 状态对象可以共享
缺点:
- 增加系统类和对象的个数
- 结构和实现较为复杂
实现方式
java
// 状态接口
public interface State {
void handle(Context context);
}
// 具体状态A
public class ConcreteStateA implements State {
@Override
public void handle(Context context) {
System.out.println("状态A处理");
context.setState(new ConcreteStateB());
}
}
// 具体状态B
public class ConcreteStateB implements State {
@Override
public void handle(Context context) {
System.out.println("状态B处理");
context.setState(new ConcreteStateA());
}
}
// 上下文
public class Context {
private State state;
public Context(State state) {
this.state = state;
}
public void setState(State state) {
this.state = state;
}
public void request() {
state.handle(this);
}
}
// 使用(订单状态)
Context context = new Context(new ConcreteStateA());
context.request(); // 状态A → 状态B
context.request(); // 状态B → 状态A练习题
- 状态模式和策略模式的区别?
- 状态模式的应用场景?
- 如何实现状态的持久化?