Patrón de estado

Patrón de diseño de software

El patrón de estado es un patrón de diseño de software de comportamiento que permite que un objeto altere su comportamiento cuando cambia su estado interno. Este patrón se acerca al concepto de máquinas de estados finitos . El patrón de estado se puede interpretar como un patrón de estrategia , que es capaz de cambiar una estrategia mediante invocaciones de métodos definidos en la interfaz del patrón.

El patrón de estado se utiliza en la programación informática para encapsular el comportamiento variable de un mismo objeto , en función de su estado interno. Esta puede ser una forma más clara de que un objeto cambie su comportamiento en tiempo de ejecución sin recurrir a declaraciones condicionales y, por lo tanto, mejorar la capacidad de mantenimiento. [1] : 395 

Descripción general

Un ejemplo de diagrama de clase y secuencia UML para el patrón de diseño State. [2]

El patrón de diseño de estado es uno de los veintitrés patrones de diseño documentados por la Banda de los Cuatro que describen cómo resolver problemas de diseño recurrentes. Dichos problemas abarcan el diseño de software orientado a objetos flexible y reutilizable, como objetos que son fáciles de implementar, cambiar, probar y reutilizar. [3]

El patrón de estado está diseñado para resolver dos problemas principales: [4]

  • Un objeto debe cambiar su comportamiento cuando cambia su estado interno.
  • El comportamiento específico de cada estado debe definirse de forma independiente, es decir, la incorporación de nuevos estados no debe afectar el comportamiento de los estados existentes.

Implementar un comportamiento específico de un estado directamente dentro de una clase es inflexible porque compromete a la clase con un comportamiento particular y hace imposible agregar un nuevo estado o cambiar el comportamiento de un estado existente más adelante, independientemente de la clase, sin cambiar la clase. En este sentido, el patrón describe dos soluciones:

  • Defina objetos (de estado) independientes que encapsulen el comportamiento específico de cada estado. Es decir, defina una interfaz (estado) para ejecutar el comportamiento específico de cada estado y defina clases que implementen la interfaz para cada estado.
  • Una clase delega el comportamiento específico del estado a su objeto de estado actual en lugar de implementar el comportamiento específico del estado directamente.

Esto hace que una clase sea independiente de cómo se implementa el comportamiento específico del estado. Se pueden agregar nuevos estados definiendo nuevas clases de estado. Una clase puede cambiar su comportamiento en tiempo de ejecución modificando su objeto de estado actual.

Estructura

Estado en UML [1]

En el diagrama de clases del Lenguaje de modelado unificado (UML) adjunto , la clase no implementa directamente el comportamiento específico del estado. En cambio, hace referencia a la interfaz para realizar el comportamiento específico del estado ( ), lo que hace que sea independiente de cómo se implementa el comportamiento específico del estado. Las clases y implementan la interfaz, es decir, implementan (encapsulan) el comportamiento específico del estado para cada estado. El diagrama de secuencia UML muestra las interacciones en tiempo de ejecución:ContextContextStatestate.handle()ContextConcreteStateAConcreteStateBState

El Contextobjeto delega un comportamiento específico del estado a diferentes Stateobjetos. Primero, Contextllama handle(this)a su objeto de estado actual (inicial) ( ConcreteStateA), que realiza la operación y llama setState(ConcreteStateB)a Contextpara cambiar el estado actual del contexto a ConcreteStateB. La próxima vez, Contextvuelve a llamar handle(this)a su objeto de estado actual ( ConcreteStateB), que realiza la operación y cambia el estado actual del contexto a ConcreteStateA.

Véase también

Referencias

  1. ^ de Erich Gamma ; Richard Helm ; Ralph Johnson ; John M. Vlissides (1995). Patrones de diseño: elementos de software orientado a objetos reutilizable . Addison-Wesley . ISBN 0-201-63361-2.
  2. ^ "El patrón de diseño del Estado: Estructura y colaboración". w3sDesign.com . Consultado el 12 de agosto de 2017 .
  3. ^ Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides (1994). Patrones de diseño: elementos de software reutilizable orientado a objetos . Addison Wesley. pp. 305ff. ISBN 0-201-63361-2.
  4. ^ "El patrón de diseño de estado: problema, solución y aplicabilidad". w3sDesign.com . Consultado el 12 de agosto de 2017 .
Obtenido de "https://es.wikipedia.org/w/index.php?title=Patrón_de_estado&oldid=1245339377"