1、状态管理枚举类
/*** OA操作类型状态枚举*/
public enum OaOperateTypeStateEnum {OaEndState(OaOperateType.END.code(), "流程结束状态操作", new OaEndState()),OaInvalidState(OaOperateType.INVALID.code(), "作废流程状态操作", new OaInvalidState());private final String code;private final String desc;private final OaOperateTypeState oaOperateTypeState;OaOperateTypeStateEnum(String code, String desc, OaOperateTypeState oaOperateTypeState) {this.code = code;this.desc = desc;this.oaOperateTypeState = oaOperateTypeState;}public String getCode() {return code;}public String getDesc() {return desc;}public OaOperateTypeState getOaOperateTypeState() {return oaOperateTypeState;}public static OaOperateTypeState getOaOperateTypeStateByCode(String code) {for (OaOperateTypeStateEnum oaOperateTypeStateEnum : OaOperateTypeStateEnum.values()) {if (oaOperateTypeStateEnum.getCode().equals(code)) {return oaOperateTypeStateEnum.getOaOperateTypeState();}}//此处使用空状态模式对非结束和作废状态不进行处理NullOaOperateTypeState nullOaOperateTypeState = new NullOaOperateTypeState();OaOperateTypeContext oaOperateTypeContext = new OaOperateTypeContext();oaOperateTypeContext.set(ContextConstant.OA_OPERATE_TYPE_KEY, code);nullOaOperateTypeState.setOaOperateTypeContext(oaOperateTypeContext);return nullOaOperateTypeState;}
}
2、状态抽象类
public abstract class OaOperateTypeState {/*** OA操作类型状态上下文*/protected OaOperateTypeContext oaOperateTypeContext;public void setOaOperateTypeContext(OaOperateTypeContext oaOperateTypeContext) {this.oaOperateTypeContext = oaOperateTypeContext;}/*** 业务处理*/public abstract void process();}
3、状态上下文
@Data
@EqualsAndHashCode(callSuper = false)
public class OaOperateTypeContext extends Context {/*** 当前的状态*/private OaOperateTypeState oaOperateTypeState;public void setOaOperateTypeState(OaOperateTypeState oaOperateTypeState) {this.oaOperateTypeState = oaOperateTypeState;this.oaOperateTypeState.setOaOperateTypeContext(this);}public void process() {this.oaOperateTypeState.process();}}
4、流程结束状态处理
/*** 流程结束状态处理**/
public class OaEndState extends OaOperateTypeState {@Overridepublic void process() {}
}
5、流程作废状态处理
/*** OA作废时业务状态处理*/
public class OaInvalidState extends OaOperateTypeState {@Overridepublic void process() {}
}
6、业务调用
protected void process(Context context) {String oaOperateType = context.get(ContextConstant.OA_OPERATE_TYPE_KEY);//使用状态模式和空对象模式对不同的业务状态进行不同处理OaOperateTypeContext oaOperateTypeContext = new OaOperateTypeContext();oaOperateTypeContext.setOaOperateTypeState(OaOperateTypeStateEnum.getOaOperateTypeStateByCode(oaOperateType));oaOperateTypeContext.setObjectMap(context.getObjectMap());oaOperateTypeContext.process();}