状态机的简单认识:
简单来说就是一套管理业务操作与状态变更的程序
核心功能:
规定了哪些状态下可以进行哪些操作,操作后的状态是什么,即它实现了操作校验,及业务走向
好处:
在业务流程较复杂的情况下,使用它可以将状态与操作相关的公共的逻辑抽取出来,当流程与状态发生变更时,也便于统一调整
核心代码:
1.状态与操作封装类
public class ApartmentActionMapping {
//当前状态
private String currentStatus;
//操作类型
private String operateType;
//下一状态
private String nextStatus;
//构建对象
public static ApartmentActionMapping ofMap(String currentStatus, String operateType, String nextStatus){
return new ApartmentActionMapping(currentStatus,operateType,nextStatus);
}
//无参构造
public ApartmentActionMapping(String currentStatus, String operateType, String nextStatus) {
this.currentStatus = currentStatus;
this.operateType = operateType;
this.nextStatus = nextStatus;
}
//省略了getset方法
}
2.状态机类
public class ApartmentMachineUtil {
//保存所有映射关系的集合
private static List mappings = new ArrayList<>();
//静态代码块中初始化好所有的映射
static {
mappings.add(ApartmentActionMapping.ofMap("待审核","初审","初审通过"));
mappings.add(ApartmentActionMapping.ofMap("初审通过","复审","已完成"));
mappings.add(ApartmentActionMapping.ofMap("已完成","关闭","已归档"));
}
//根据当前状态与操作类型获取下一状态(注意,要保证同一currentStatus与operateType在映射关系中唯一)
public static ApartmentActionMapping getNext(String currentStatus, String operateType){
for (ApartmentActionMapping mapping : mappings) {
if(currentStatus.equals(mapping.getCurrentStatus())&&operateType.equals(mapping.getOperateType())){
return mapping;
}
}
return null;
}
}
小弟首次发文,望大家多多指导!