- 目的 :允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
- 核心 :定义状态接口封装特定状态下的行为。上下文对象(Context)持有当前状态对象的引用,并将行为委托给当前状态对象。状态转换通常由状态对象或上下文触发。
- 场景 :对象的行为强烈依赖于其内部状态,且状态转换逻辑复杂的场景。比如订单/工作流状态管理、UI组件状态。
窗口上下文类,负责管理当前状态和状态切换
java
package state;
public class WindowContext {
private IState currentState; // 当前状态对象
public WindowContext(IState initialState) {
this.currentState = initialState;
}
public void setState(IState newState) { // 设置新的窗口状态
this.currentState = newState;
}
public void switchState() { // 切换窗口状态
currentState.handle(this);
}
}
状态接口,定义状态处理行为
java
package state;
public interface IState {
// 处理状态切换
void handle(WindowContext context);
}
根据不同状态执行不同操作
java
package state;
public class FullscreenState implements IState {
@Override
public void handle(WindowContext context) {
context.setState(new WindowState()); // 切换到窗口状态
System.out.println("切换为窗口状态");
}
}
java
package state;
public class WindowState implements IState {
@Override
public void handle(WindowContext context) {
context.setState(new FullscreenState()); // 切换到全屏状态
System.out.println("切换为全屏状态");
}
}
函数入口
java
package state;
public class MainTest {
public static void main(String[] args) {
// 创建窗口上下文,初始状态为窗口状态
WindowContext context = new WindowContext(new WindowState());
context.switchState(); // 第一次切换:窗口状态 -> 全屏状态
context.switchState(); // 第二次切换:全屏状态 -> 窗口状态
context.switchState(); // 第三次切换:窗口状态 -> 全屏状态
}
}
终端输出
切换为全屏状态
切换为窗口状态
切换为全屏状态
