public class MyStateMachine {
private State currentState;
public MyStateMachine() {
currentState = new InitialState();
}
public void processEvent(Event event) {
currentState = currentState.handleEvent(event);
}
}
public interface State {
State handleEvent(Event event);
}
public class InitialState implements State {
@Override
public State handleEvent(Event event) {
if (event == Event.A) {
return new StateA();
} else if (event == Event.B) {
return new StateB();
} else {
return this;
}
}
}
public class StateA implements State {
@Override
public State handleEvent(Event event) {
if (event == Event.C) {
return new StateC();
} else {
return this;
}
}
}
public class StateB implements State {
@Override
public State handleEvent(Event event) {
if (event == Event.C) {
return new StateC();
} else {
return this;
}
}
}
public class StateC implements State {
@Override
public State handleEvent(Event event) {
if (event == Event.D) {
return new StateD();
} else {
return this;
}
}
}
public class StateD implements State {
@Override
public State handleEvent(Event event) {
return this;
}
}
public enum Event {
A, B, C, D
}