Java 클래스에서 Finite State Machine을 구현 중입니다. FSM에 상태를 지정해야하기 때문에 자신의 객체 인 상태와 이벤트가있는 또 다른 예제를 찾을 수 없었습니다 (아마도 그 이유가 있을까요?). 그리고 나는 내 솔루션에 대해 확신하지 못했습니다. (실제 관리자)를 선택하고 FSM을 상태에 할당합니다 (상태 변경을 알리기 위해). 저는 여기에 상태를 할당하는 상태 관리자에 대한 코드, 그리고에 요구한다면, 그것을 밖으로 뱉어 :Java에서 객체 상태가있는 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;
}
}
여기에 출력 상태로 이벤트를 매핑하는 맵을 사용하는 상태, 그리고의 경우 상태가 관리자에게 통지하지 않았을 있도록
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);
}
}
방법이 있나요 유사한 솔루션의 종류 : 전환은 FSM 클래스를 통지?
이것은 버그가 발생하기 쉬운 것처럼 보입니다. 언제 FSMStates에 이벤트 전환을 추가합니까? 당신이 지금까지 해왔 던 방식으로 이벤트가 발생하면 등록 된 FSMState (현재 상태에 관계없이)에서 발사하고 현재 상태를 변경합니다. 현재 상태가 해고되기위한 이벤트 만 필요하므로 올바른 전환을 얻을 수 있습니다. – Illidanek