一、核心作用:
解决系统中对象的状态转换以及不同状态下行为的封装
二、常见应用场景:
- 银行系统中的账号状态管理
- OA系统中的公文状态管理
- 酒店管理系统,房间状态管理
三、状态模式的实现:
- Context 环境类:环境类中维护着State对象,定义了当前的状态
- State状态接口:状态接口
- ConcreteState具体状态类:每个类封装了一个状态行为
四、代码示例:
一、状态接口代码:
package com.hezeu.state;
/**
* @Classname State
* @Description TODO
* @Date 2020/2/26 下午 11:48
* @Created by 朱进博 1724282894@qq.com
*/
public interface State {
void handle();
}
二、具体状态类:
package com.hezeu.state;
/**
* @Classname FreeState
* @Description 空闲
* @Date 2020/2/26 下午 11:52
* @Created by 朱进博 1724282894@qq.com
*/
public class FreeState implements State {
@Override
public void handle() {
System.out.println("房间空闲!");
}
}
三、Context环境/上下文类:
package com.hezeu.state;
/**
* @Classname HomeContext
* @Description TODO
* @Date 2020/2/27 上午 12:01
* @Created by 朱进博 1724282894@qq.com
*/
public class HomeContext {
private State state;
public void setState(State state) {
System.out.println("修改状态");
this.state = state;
state.handle();
}
}
五、状态模式的优缺点:
优点:
- 封装了转换规则
- 实现抽象接口,想增加新的状态只需创建新的类即可
- 允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的语句块
- 可以共享状态对象
缺点:
- 状态模式使用会增加系统类和对象的个数
- 状态模式的结构与实现较为复杂,使用不当导致程序结构和代码混乱