Recebi um código Java para analisar, que simula uma corrida de carros, da qual inclui uma implementação de uma máquina de estado básica. Esta não é uma máquina clássica de estado da ciência da computação, mas apenas um objeto que pode ter vários estados e pode alternar entre seus estados com base em uma série de cálculos.
Para descrever apenas o problema, eu tenho uma classe Car, com uma classe enum aninhada que define algumas constantes para o estado do carro (como OFF, IDLE, DRIVE, REVERSE, etc.). Dentro dessa mesma classe Car, eu tenho uma função de atualização, que consiste basicamente em uma declaração de chave grande que liga o estado atual dos carros, faz alguns cálculos e depois altera o estado dos carros.
Tanto quanto eu posso ver, o estado Cars é usado apenas dentro de sua própria classe.
Minha pergunta é: essa é a melhor maneira de lidar com a implementação de uma máquina de estado da natureza descrita acima? Parece a solução mais óbvia, mas no passado eu sempre ouvi dizer que "as declarações de switch são ruins".
O principal problema que vejo aqui é que a instrução switch pode se tornar muito grande à medida que adicionamos mais estados (se necessário) e o código pode se tornar pesado e difícil de manter.
Qual seria a melhor solução para esse problema?
object.state = object.function(object.state);