On m'a donné du code Java à regarder, qui simule une course de voitures, dont une implémentation d'une machine d'état de base. Il ne s'agit pas d'une machine à états informatique classique, mais simplement d'un objet qui peut avoir plusieurs états et qui peut basculer entre ses états en fonction d'une série de calculs.
Pour décrire le problème, j'ai une classe Car, avec une classe enum imbriquée qui définit certaines constantes pour l'état de la voiture (telles que OFF, IDLE, DRIVE, REVERSE, etc.). Dans cette même classe de voitures, j'ai une fonction de mise à jour, qui consiste essentiellement en une grande déclaration de commutateur qui active l'état actuel des voitures, effectue des calculs, puis modifie l'état des voitures.
Pour autant que je puisse voir, l'état Cars n'est utilisé que dans sa propre classe.
Ma question est la suivante: est-ce la meilleure façon de traiter la mise en œuvre d'une machine à états de la nature décrite ci-dessus? Cela semble être la solution la plus évidente, mais dans le passé, j'ai toujours entendu dire que "les instructions de commutation sont mauvaises".
Le principal problème que je peux voir ici est que l'instruction switch peut devenir très volumineuse à mesure que nous ajoutons plus d'états (si cela est jugé nécessaire) et que le code peut devenir lourd et difficile à maintenir.
Quelle serait une meilleure solution à ce problème?
object.state = object.function(object.state);