Dostałem trochę kodu Java do obejrzenia, który symuluje wyścig samochodowy, w tym implementację podstawowej maszyny stanu. To nie jest klasyczna machina stanów komputerowych, lecz jedynie obiekt, który może mieć wiele stanów i może przełączać się między tymi stanami na podstawie serii obliczeń.
Aby opisać tylko problem, mam klasę samochodów z zagnieżdżoną klasą enum, która definiuje niektóre stałe dla stanu samochodu (takie jak OFF, IDLE, DRIVE, REVERSE itp.). W tej samej klasie samochodów mam funkcję aktualizacji, która zasadniczo składa się z dużej instrukcji przełączania, która włącza bieżący stan samochodu, wykonuje pewne obliczenia, a następnie zmienia stan samochodu.
Z tego, co widzę, stan Samochody jest używany tylko w swojej klasie.
Moje pytanie brzmi: czy jest to najlepszy sposób radzenia sobie z implementacją maszyny stanu o charakterze opisanym powyżej? Brzmi jak najbardziej oczywiste rozwiązanie, ale w przeszłości zawsze słyszałem, że „instrukcje przełączników są złe”.
Główny problem, jaki widzę tutaj, polega na tym, że instrukcja switch może stać się bardzo duża, ponieważ dodamy więcej stanów (jeśli zostanie to uznane za konieczne), a kod może stać się niewygodny i trudny do utrzymania.
Jakie byłoby lepsze rozwiązanie tego problemu?
object.state = object.function(object.state);