状态模式核心
- 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
状态模式结构
- Context环境类
环境类中维护一个State对象,它是定义了当前的状态 - State抽象状态类
- ConcerteState具体状态类
每一个类封装了一个状态对应的行为
情景
酒店系统中,房间的状态变化:
• 已预订
• 已入住
• 空闲
状态模式实现
状态接口:
public interface State {
void handle();
}
空闲状态:
/**
* 空闲状态
*
* @author
*
*/
public class FreeState implements State{
@Override
public void handle() {
System.out.println("房间空闲");
}
}
入住状态:
/**
* 已入住状态
*
* @author
*
*/
public class BookedState implements State{
@Override
public void handle() {
System.out.println("房间已入住!!请勿打扰");
}
}
预订状态:
/**
* 已预订
*
* @author
*
*/
public class BookeState implements State{
@Override
public void handle() {
System.out.println("房间已预定");
}
}
上下文对象:
/**
* 上下文对象(房间对象)
* @author
*
*/
public class Context {
//如果是银行系统,这个Context类就是账号,根据金额不同切换不同的状态
private State state;
public void setState(State s) {
System.out.println("修改状态");
state = s;
state.handle();
}
}
调用者:
public class Client {
public static void main(String[] args) {
Context context = new Context();
context.setState(new FreeState());
context.setState(new BookedState());
}
}
开发中常见的场景
- 银行系统中账号状态的管理
- OA系统中公文状态的管理
- 酒店系统中,房间状态的管理
- 线程对象各状态之间的切换