El patrón Estado es un patrón de diseño de comportamiento que permite que un objeto altere su comportamiento cuando cambia su estado interno.

¿Qué problema resuelve el patrón estado?

Un ejemplo de aplicación para este patrón sería el de una aplicación de gestión de documentos. En este tipo de aplicaciones tienes diferentes estados por los que puede pasar un documento. Resulta que estas máquinas de estados, generalmente se implementan con muchas declaraciones condicionales, necesarios según el comportamiento y estado actual del objeto.

El problema es que una máquina de estados basada en condicionales empieza a revelar problemas a medida que empezamos a agregar más y más estados y comportamientos dependientes de la clase principal.

Los métodos contienen condicionales monstruosos para elegir el comportamiento adecuado de un método de acuerdo con el estado actual, y el código se hace difícil de mantener. Si el proyecto evoluciona, el problema también.

El patrón Estado sugiere que crees nuevas clases para todos los estados posibles de un objeto y extraigas todos los comportamientos específicos del estado en estas clases.

¿Cuándo usar el patrón estado?

Deberías utilizar el patrón Estado cuando tengas un objeto que se comporte de manera diferente dependiendo de su estado actual, la cantidad de estados es enorme, y el código específico del estado cambia con frecuencia.

La idea es extraer todo el código específico del estado en un conjunto de clases distintas para agregar nuevos estados o cambiar los existentes de forma independiente. Esto reduce el coste de mantenimiento.

También podrías utilizar el patrón cuando tengas una clase llena de condicionales que alteren el comportamiento de la clase de acuerdo con los valores actuales de los campos de la clase. Este patrón te permite extraer ramas de estos condicionales en métodos de clases de estado correspondientes.

Y por último, usa el patrón Estado cuando tengas mucho código duplicado en estados y transiciones similares de una máquina de estados basada en condiciones. Este patrón te permite componer jerarquías de clases de estado y reducir la duplicación mediante la extracción de código común en clases base abstractas.

Pros y contras del patrón estado

Los siguientes son algunos de los “pros y cons” de este patrón.

Pros

Contras

  • Principio de responsabilidad única. Organiza el código relacionado con estados particulares en clases separadas

  • Principio abierto/cerrado. Puedes introducir nuevos estados sin cambiar las clases de estado existentes

  • Simplicia el código del contexto eliminando los condicionales voluminosos de la máquina de estado

  • Aplicar el patrón puede ser excesivo si una máquina de estado tiene solo unos pocos estados.

“Show me the code”

El patrón Estado es relativamente complejo y bastante popular en PHP. Se usa ocasionalmente en PHP para convertir máquinas de estado grandes basadas en operadores de switch en objetos.

Si quieres saber cómo se ve el patrón Estado, puedes ver un ejemplo en sourcemaking.com. En el ejemplo del “mundo real” podrás ver cómo algunas clases se reemplazarán entre sí dependiendo de cuántas veces se llamen.

¿Utilizas el patrón Estado en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!

Fuentes:

Compartir es construir