如何使用Java枚举实现“循环”FSM
我试图用Java实现一个有限状态机,我遇到了以下问题 我的要求是,我有一个系统,需要循环通过一组已知的状态 e、 g.S1->S2->S3。。。序号->S1 然后在它返回到初始状态后停止 问题是初始状态可以是任何已知状态,例如S1到SN,并且不受我的控制 无论哪个状态开始循环,我都需要确保在返回之前以正确的顺序访问所有其他状态 无论初始状态是什么 我希望使用以下Enum:- 如何实现循环FSM 每个状态创建一个枚举值。 返回doSomething中的下一个状态。 从某种状态开始,循环使用剂量测定法,直到再次达到。 实际上,这将类似于:如何使用Java枚举实现“循环”FSM,java,enums,fsm,Java,Enums,Fsm,我试图用Java实现一个有限状态机,我遇到了以下问题 我的要求是,我有一个系统,需要循环通过一组已知的状态 e、 g.S1->S2->S3。。。序号->S1 然后在它返回到初始状态后停止 问题是初始状态可以是任何已知状态,例如S1到SN,并且不受我的控制 无论哪个状态开始循环,我都需要确保在返回之前以正确的顺序访问所有其他状态 无论初始状态是什么 我希望使用以下Enum:- 如何实现循环FSM 每个状态创建一个枚举值。 返回doSomething中的下一个状态。 从某种状态开始,循环使用剂量测定
public enum State {
S1 {
@Override
State doSomething() {
// Do something useful
return S2;
}
},
S2 {
@Override
State doSomething() {
// Do something useful
return S3;
}
},
// ...
SN {
@Override
State doSomething() {
// Do something useful
return S1;
}
},
abstract State doSomething();
}
然后:
老实说,我不太喜欢像你上面计划的那样用enum实现FSM,因为它使FSM在enum中几乎是硬编码的。谢谢你,我想你是想让S2返回S3
public enum State {
S1 {
@Override
State doSomething() {
// Do something useful
return S2;
}
},
S2 {
@Override
State doSomething() {
// Do something useful
return S3;
}
},
// ...
SN {
@Override
State doSomething() {
// Do something useful
return S1;
}
},
abstract State doSomething();
}
State state = initialState;
do {
// Do something useful with state
}
while((state = initialState.doSomething()) != initialState);