解决系统中复杂对象的状态转换,以及不同状态下行为的封装。
结构:
Context 环境类:管理不同状态的切换
State 抽象状态类
ConcreteState 具体状态类:每个类封装了一个状态对应的行为
状态模式模拟酒店入住系统:
抽象状态类:
public interface State {
void handler();
}
三个具体状态类:
/*空闲状态*/
public class FreeState implements State {
@Override
public void handler() {
System.out.println("房间空闲");
}
}
/*预定状态*/
public class BookedState implements State{
@Override
public void handler() {
System.out.println("房间已预定");
}
}
/*入住状态*/
public class CheckedState implements State{
@Override
public void handler() {
System.out.println("房间已入住,请勿打扰");
}
}
一个酒店房间上下文类:
/*上下文类*/
public class RoomContext {
private State state;
public void setState(State state) {
System.out.println("修改状态");
this.state = state;
state.handler();
}
}
客户端实现修改状态:
public class client {
public static void main(String[] args) {
RoomContext context=new RoomContext();
context.setState(new FreeState());
context.setState(new BookedState());
}
}