我在 java 类中实现了一个有限状态机。我无法找到另一个将状态和事件作为它们自己的对象的示例(也许这是有原因的?),而且我不太相信我的解决方案,特别是因为我必须为 FSM 分配一个状态(实际管理者)然后将 FSM 分配给状态(以通知状态更改)。这是状态管理器的代码,我为其分配了一个状态,并在被要求时将其吐出:
public class FSM {
public void setCurrentState(FSMState newCurrentState) {
this.currentState = newCurrentState;
}
private FSMState currentState;
public FSMState getCurrentState() {
if (this.currentState == null)
System.out.println("No current state");
return this.currentState;
}
}
这是状态,它使用映射将事件映射到输出状态,并在转换的情况下通知 FSM 类:
public class FSMState implements EventListener {
private FSM managingFSM;
private Map<Event,FSMState> transitions;
public FSMState(FSM managingFSM) {
this.transitions = new HashMap<Event, FSMState>();
this.managingFSM = managingFSM;
}
public void addEventTransition(Event event, FSMState outputState){
transitions.put(event, outputState);
event.registerListener(this);
}
@Override
public void eventOccured(Event e) {
FSMState newState = transitions.get(e);
this.managingFSM.setCurrentState(newState);
}
}
有没有办法,有一种类似的解决方案,这样国家就不必通知经理了?