Lo que deduzco de implementación típica de State pattern s es la siguiente:¿El patrón de estado representa con precisión el enfoque?
Problema: representar un objeto O, cuyo comportamiento se altera en función de su estado actual.
Solución:
1. Sea S , otro objeto dentro de este objeto O, representan estado
2. El objeto S invocará la operación apropiada de O
3. El objeto S decidirá el siguiente estado para el objeto O
Mi preocupación es principalmente w ith #3
. La tabla de transición del estado está esencialmente distribuida en todos los estados. He visto que estas soluciones se vuelven engorrosas de administrar muy rápidamente. En lugar de ser un indicador, estos estados contienen demasiada información sobre la máquina de estado.
Aunque me molesta #2
, creo que es bastante razonable (Moore machine). El único problema que he visto surge durante la corrección/depuración de errores: el código de navegación/comprensión se vuelve difícil hasta que uno confía todas las asignaciones de estado a la memoria.
¿La siguiente implementación sería más precisa?
Representa estados como enumeraciones, y el objeto decide la acción según el valor que tiene la enumeración. state transitions
están en una tabla (δ, una función de transición de estado) que es un mapa del estado actual al estado siguiente. Este state transition table
también contiene la acción que se realizará (Mealy machine)
Sí. Es realmente un patrón. Por favor, corrija el título para reflejar su pregunta real. –
Lo que describes es otra forma (y bastante común de lo que he visto) de implementar una máquina de estado, pero no es el patrón de máquina de estado (como se menciona en el libro de patrones de GoF) – nos
+1, gracias. Actualizado el título. – CMR