Java中带有枚举的自运行到完成状态机
在开发过程中,我需要设计一个带有决策的状态机,它运行到完成,并执行状态转换,而不需要等待事件。因此,我提出了下面的实现,我想与大家分享 因此,状态机使用以下枚举进行描述Java中带有枚举的自运行到完成状态机,java,design-patterns,enums,state-machine,Java,Design Patterns,Enums,State Machine,在开发过程中,我需要设计一个带有决策的状态机,它运行到完成,并执行状态转换,而不需要等待事件。因此,我提出了下面的实现,我想与大家分享 因此,状态机使用以下枚举进行描述 public enum PnoBarringState { OPERATOR_WHITE_LIST_START { @Override public PnoBarringState nextState(SessionData sessionData, String pnoValue) { if
public enum PnoBarringState {
OPERATOR_WHITE_LIST_START {
@Override
public PnoBarringState nextState(SessionData sessionData, String pnoValue) {
if (commonMethods.isMatchingOperatorsWhiteList(sessionData, pnoValue)) {
return GROUP_WHITE_LIST;
} else {
return OPERATOR_BLACK_LIST;
}
}
},
GROUP_WHITE_LIST {
@Override
public PnoBarringState nextState(SessionData sessionData, String pnoValue) {
if (commonMethods.isMatchingGroupsWhiteList(sessionData, pnoValue)) {
return PNO_CHECK_FINISHED;
} else {
return GROUP_BLACK_LIST;
}
}
},
OPERATOR_BLACK_LIST {
@Override
public PnoBarringState nextState(SessionData sessionData, String pnoValue) {
if (commonMethods.isMatchingOperatorsBlackList(sessionData, pnoValue)) {
return PNO_FORBIDDEN_NUMBER_OPERATOR_LEVEL;
} else {
return GROUP_WHITE_LIST;
}
}
},
GROUP_BLACK_LIST {
@Override
public PnoBarringState nextState(SessionData sessionData, String pnoValue) {
if (commonMethods.isMatchingGroupsBlackList(sessionData, pnoValue))
return PNO_FORBIDDEN_NUMBER_GROUP_LEVEL;
else {
return PNO_CHECK_FINISHED;
}
}
},
PNO_CHECK_FINISHED {
@Override
public PnoBarringState nextState(SessionData sessionData, String pnoValue) {
return this;
}
@Override
public boolean hasNext() {
return false;
}
},
PNO_FORBIDDEN_NUMBER_OPERATOR_LEVEL {
@Override
public PnoBarringState nextState(SessionData sessionData, String pnoValue) {
throw new CustomUncheckedException( "Operator Level Barring");
}
},
PNO_FORBIDDEN_NUMBER_GROUP_LEVEL {
@Override
public PnoBarringState nextState(SessionData sessionData, String pnoValue) {
throw new CustomUncheckedException("Group Level Barring");
}
};
public abstract PnoBarringState nextState(SessionData sessionData, String pnoValue);
public boolean hasNext() { return true; }
}
函数“nextState()”是抽象的,并在每个状态中实现,以便检查转换并返回到新状态。只有“结束”状态返回到相同的状态。
由于它也被设计用于完成运行,因此提供了“hasNext()”函数。“结束”状态正在覆盖,以便声明状态机的结束
然后,通过以下方式在普通应用程序代码中使用此枚举
PnoBarringState pnoBarringState = PnoBarringState.OPERATOR_WHITE_LIST_START;
while (pnoBarringState.hasNext()) {
pnoBarringState = pnoBarringState.nextState(sessionData, pnoValue);
}
我不确定是否有任何模式以同样的方式描述它,但我很想分享它。
任何其他方法都被认为是有价值的。这似乎是一个值得考虑的问题。