用于解决系统中复杂对象的状态转换,以及不同状态下行为的封装问题。主要包含context环境类,state抽象状态类,concreteState具体状态类。具体应用场景:线程对象不同状态的切换。
现在有一个场景是酒店系统,房间状态:已预定,已入住,空闲。这三个状态之间相互切换。
状态接口
public interface State {
void handle();
}
房间空闲状态类
public class FreeState implements State {
@Override
public void handle() {
System.out.println("空闲状态");
}
}
已预定状态
public class BookedState implements State {
@Override
public void handle() {
System.out.println("已预定状态");
}
}
已入住状态
public class LivedState implements State {
@Override
public void handle() {
System.out.println("已入住状态");
}
}
上下文类
public class Context {
private State state;
public void setState(State state) {
System.out.println("修改状态");
this.state = state;
state.handle();
}
}
测试类
public class Test {
public static void main(String[] args) {
Context context = new Context();
context.setState(new FreeState());
}
}
最后的输出:
修改状态
空闲状态