Ответ 1
Вы можете смоделировать базовый FSM (конечный автомат) с использованием перечислений:
public enum State {
ONE {
@Override
public Set<State> possibleFollowUps() {
return EnumSet.of(TWO, THREE);
}
},
TWO {
@Override
public Set<State> possibleFollowUps() {
return EnumSet.of(THREE);
}
},
THREE // final state
;
public Set<State> possibleFollowUps() {
return EnumSet.noneOf(State.class);
}
}
В то время как код для создания этого будет очень многословным, если ситуация усложнится, приятно отметить, что вы получаете безопасность во время компиляции, безопасность потоков и высокую производительность.