状态模式(State pattern)
概念
不同状态对应不同行为,红灯停,绿灯行,黄灯亮了等一等!
核心
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
结构
1:环境类(Context),环境类中维护一个State对象,它是定义了当前的状态
2:抽象状态类(State)
3:具体状态类(ConcreteState),每一个类封装了一个状态对应的行为
开发中场景
1:银行系统账号状态管理
2:OA系统中公文状态管理
3:酒店系统房间状态管理
4:线程对象各个对象之间切换
案例(酒店系统房间状态)
同一抽象接口
/*
* 同一抽象接口
*/
public interface State {
void handle();
}
具体状态类
房间空闲类
/*
* 房间空闲状态
*/
public class FreeState implements State{
@Override
public void handle() {
System.out.println("房间空闲!");
}
}
房间入住类
/*
* 房间入住状态
*/
public class CheckedState implements State{
@Override
public void handle() {
System.out.println("房间已经入住!");
}
}
环境类
/*
* 环境类,表示当前房间状态,根据条件做状态切换
*/
public class HouseContext {
private State state;
public void setState(State state) {
this.state = state;
System.out.println("状态切换!");
state.handle();
}
}
客户端测试
public class Client {
public static void main(String[] args) {
State state = new FreeState();
HouseContext context = new HouseContext();
context.setState(state);
context.setState(new BookedState());
}
}
console:
状态切换!
房间空闲!
状态切换!
房间已经预定!