Me han dado un código Java para ver, que simula una carrera de autos, de los cuales incluye una implementación de una máquina de estado básica. Esta no es una máquina de estados de informática clásica, sino simplemente un objeto que puede tener múltiples estados y puede cambiar entre sus estados en función de una serie de cálculos.
Para describir solo el problema, tengo una clase Car, con una clase enum anidada que define algunas constantes para el estado del automóvil (como OFF, IDLE, DRIVE, REVERSE, etc.). Dentro de esta misma clase de automóviles, tengo una función de actualización, que básicamente consiste en una declaración de cambio grande que activa el estado actual de los automóviles, hace algunos cálculos y luego cambia el estado de los automóviles.
Por lo que puedo ver, el estado de Cars solo se usa dentro de su propia clase.
Mi pregunta es, ¿es esta la mejor manera de lidiar con la implementación de una máquina de estado de la naturaleza descrita anteriormente? Suena como la solución más obvia, pero en el pasado siempre he escuchado que "las declaraciones de cambio son malas".
El principal problema que puedo ver aquí es que la declaración de cambio podría volverse muy grande a medida que agregamos más estados (si se considera necesario) y el código podría volverse difícil de manejar y difícil de mantener.
¿Cuál sería una mejor solución para este problema?
object.state = object.function(object.state);