Java状态模式是一种行为型设计模式,其本质是允许对象在内部状态改变时改变其行为。它将对象的状态封装成一个独立的类,使得状态可以独立于对象进行变化,从而使得对象的行为也可以随之发生变化。
以下是一个简单的Java状态模式的示例:
// 状态接口
public interface State {
public void doAction(Context context);
}
// 具体状态类1
public class StateA implements State {
@Override
public void doAction(Context context) {
// 执行状态A相关的操作
context.setState(new StateB()); // 切换到下一个状态
}
}
// 具体状态类2
public class StateB implements State {
@Override
public void doAction(Context context) {
// 执行状态B相关的操作
context.setState(new StateC()); // 切换到下一个状态
}
}
// 具体状态类3
public class StateC implements State {
@Override
public void doAction(Context context) {
// 执行状态C相关的操作
context.setState(this); // 保持当前状态不变
}
}
// 上下文类
public class Context {
private State state;
public Context() {
this.state = new StateA(); // 初始状态为A
}
public void setState(State state) {
this.state = state;
}
public void doAction() {
this.state.doAction(this);
}
}
// 测试代码
public class StateDemo {
public static void main(String[] args) {
Context context = new Context();
context.doAction(); // 状态从A变为B
context.doAction(); // 状态从B变为C
context.doAction(); // 状态保持不变,仍为C
}
}
在这个示例中,状态接口State定义了一个doAction()方法,而具体的状态类则实现了这个方法来执行自己相关的操作,并根据需要切换到下一个状态。上下文类Context中维护了当前状态,并提供了一个setState()方法来改变状态,以及一个doAction()方法来执行当前状态的操作。测试代码展示了如何使用状态模式来管理对象的状态和行为。