什么是状态模式
状态模式:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题.
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
角色构成
- Context
- 环境类,环境类中维护一个State对象,他是定义当前的状态。处理一些请求,这些请求最终产生的响应会与状态相关。
- State
- 抽象状态类,它定义了每一个状态的行为集合,这些行为会在Context中得以使用。
- ConcreteState
- 具体状态,实现相关行为的具体状态类.
开发中常见场景
- 银行系统中账号状态的管理
- OA系统中公文状态的管理
- 酒店系统中,房间状态的管理
- 线程对象各状态之间的切换
经典实例
Context:
// 如果是银行系统,这个Context类就是账号,根据金额不同,切换不同的状态
private State state; // 房间状态
public void setState(State state) {
System.out.println("修改状态");
this.state = state;
state.handle();
}
State
//状态接口类
public interface State {
void handle();
}
BookedState
public class BookedState implements State{
@Override
public void handle() {
System.out.println("房间已预订,别人不能订!");
}
}
CheckedInState
public class CheckedInState implements State{
@Override
public void handle() {
System.out.println("房间已入住,请勿打扰!");
}
}
FreeState
public class FreeState implements State{
@Override
public void handle() {
System.out.println("房间空闲,没人住!");
}
}
Test
public class Test {
public static void main(String[] args) {
Context ctx = new Context();
ctx.setState(new FreeState());
ctx.setState(new BookedState());
}