/ / Un patrón para manejar transiciones de estados - java, estado

Un patrón para manejar transiciones de estados - java, estado

Estoy diseñando un juego, que hace transiciones a través de un puñado de estados, he visto que se usan dos patrones, uno es el siguiente:

1) patrón de enumeración donde como tal:

static {
// standard states
transitions.put(PHASE 1, new State[]{PHASE2, PHASE3, PHASE4});

2) El patrón de estado en una clase, donde tiene un resumen, y subclases que extienden el resumen y representan cada estado. ¿El patrón de monostato?

Estoy algo desgarrado entre los dos, ambos parecen buenas soluciones, ¿qué sería más limpio para un juego y más fácil de entender?

Personalmente me gusta el monostato, pero el método de enumeración parece ser el camino.

Respuestas

2 para la respuesta № 1

En cuanto al "código más limpio", es una cuestión de elección.

Algunas cosas a considerar

¿Qué pasará con el código si lo añades?¿Otro estado y N transiciones? ¿Todavía es legible para usted y los otros desarrolladores del equipo? Pruebe y llegue a algún tipo de consenso o quizás incluya esto en una guía de estilo de código.

En mi humilde opinión, dado que el lenguaje que está utilizando está orientado a objetos, usaría el patrón de estado del libro de GOF, ya que utiliza encapsulación y polimorfismo.

Si lo estuviera escribiendo en "C", optaría por el enfoque basado en la tabla.


1 para la respuesta № 2

Eso depende de si necesita almacenar alguna lógica empresarial en el estado o no. La segunda opción probablemente hace esto más fácil. Todos tus estados pueden implementar algo como:

interface State {
State transition(Event event);
}

y luego puedes tener un tipo de clase de administrador que te permite administrar la transición:

class StateManager {
State actualState = new BaseState();
void processEvent(Event event) {
actualState = actualState.transition(event);
}
}

Tus implementaciones de State luego elija y devuelva el siguiente estado en función de la entrada.

Básicamente estás implementando una máquina de estado finito.

Si su máquina es susceptible de complicarse.rápidamente, deberías, como dice @duffymo, externalizar las transiciones. Estoy seguro de que hay bibliotecas que hacen esto, aunque no conozco ninguna por su nombre.


0 para la respuesta № 3

No recomendaría ninguno. Escriba una máquina de estados finitos y externalice los estados y las transiciones a XML o JSON. Será un diseño mucho más flexible.