说明
本文只对策略枚举可以使用的场景进行说明,不做其他介绍。提供额外的实现思路。
状态流转
在开发过程中,难免会遇到状态之间的流转,如何方便维护并且能够一目了然的知道状态之间的流转呢?
例如:
上图可以看出,我们有状态组:黄色框的内容;操作组:连接线上的内容。
就可以使用一个状态枚举来包装
package com.strategy.enums;
/**
* 单据状态
*/
public enum StatusEnum {
/** 已提报 */
HAD_CREATE(1, "已新建"),
/** 已提报 */
HAD_SUBMIT(2, "已提报") ,
/** 已审核" */
HAD_AUDIT(3, "已审核") ,
/** 已退回 */
HAD_BACK(4, "已退回"),
/** 已拒绝 */
HAD_REJECT(5, "已拒绝"),
/** 已生成结算 */
HAD_USE(6, "已生成结算"),
/** 已关闭 */
HAD_CLOSE(7, "已关闭");
/** 枚举值 */
private int index;
/** 枚举描述 */
private String name;
StatusEnum(int index, String name) {
this.index = index;
this.name = name;
}
public int getIndex() {
return index;
}
public String getName() {
return name;
}
}
如何改造成策略枚举呢,加上操作(方法)与绑定(重写)。
package com.strategy.enums;
/**
* 单据状态
*/
public enum StatusEnum {
/** 已提报 */
HAD_CREATE(1, "已新建") {
@Override
public StatusEnum create() {
return HAD_CREATE;
}
@Override
public StatusEnum save() {
return HAD_CREATE;
}
@Override
public StatusEnum submit() {
return HAD_SUBMIT;
}
@Override
public StatusEnum close() {
return HAD_CLOSE;
}
},
/** 已提报 */
HAD_SUBMIT(2, "已提报") {
@Override
public StatusEnum pass() {
return HAD_AUDIT;
}
@Override
public StatusEnum back(</