Ich habe mir Java-Code zum Anschauen gegeben, der ein Autorennen simuliert, zu dem auch die Implementierung einer Basis-Zustandsmaschine gehört. Dies ist keine klassische Informatik-Zustandsmaschine, sondern lediglich ein Objekt, das mehrere Zustände haben kann und auf der Grundlage einer Reihe von Berechnungen zwischen seinen Zuständen wechseln kann.
Um nur das Problem zu beschreiben, habe ich eine Auto-Klasse mit einer verschachtelten Enum-Klasse, die einige Konstanten für den Zustand des Autos definiert (wie AUS, LEERLAUF, ANTRIEB, RÜCKWÄRTS usw.). Innerhalb derselben Fahrzeugklasse habe ich eine Aktualisierungsfunktion, die im Wesentlichen aus einer großen switch-Anweisung besteht, die den aktuellen Status des Fahrzeugs einschaltet, einige Berechnungen durchführt und dann den Fahrzeugstatus ändert.
Soweit ich sehen kann, wird der Cars-Status nur innerhalb seiner eigenen Klasse verwendet.
Meine Frage ist, ist dies der beste Weg, um mit der Implementierung einer Zustandsmaschine der oben beschriebenen Art umzugehen? Es klingt nach der naheliegendsten Lösung, aber in der Vergangenheit habe ich immer gehört, dass "switch-Anweisungen schlecht sind".
Das Hauptproblem, das ich hier sehen kann, ist, dass die switch-Anweisung möglicherweise sehr groß werden kann, wenn wir weitere Zustände hinzufügen (falls dies als notwendig erachtet wird) und der Code unhandlich und schwer zu warten sein kann.
Was wäre eine bessere Lösung für dieses Problem?
object.state = object.function(object.state);