2.1 Estado

El estado es un patrón de diseño de comportamiento. Se utiliza en aquellos casos en que, durante la ejecución del programa, el objeto debe cambiar su comportamiento en función de su estado.

Estado

El patrón consta de 3 bloques:

El contexto es una clase cuyos objetos deberían cambiar su comportamiento dependiendo del estado.

Estado es la interfaz que debe implementar cada uno de los estados concretos. A través de esta interfaz, el objeto Context interactúa con el estado al delegarle llamadas a métodos. La interfaz debe contener medios para la retroalimentación al objeto cuyo comportamiento se va a cambiar.

Para ello se utiliza un evento (patrón Publisher - Subscriber). Esto es necesario para reemplazar el objeto de estado durante la ejecución del programa cuando ocurren eventos. Puede haber casos en los que el propio Contexto sondee periódicamente el objeto de estado en busca de una transición.

ConcreteState1, ConcreteState2 - clases de estados concretos. Debe contener información sobre en qué condiciones y en qué estados el objeto puede pasar del estado actual. Por ejemplo, desde ConcreteState1, un objeto puede ir a ConcreteState2 y ConcreteState3, y desde ConcreteState2 de regreso a ConcreteState1, y así sucesivamente. El objeto de uno de ellos debe contener el Contexto cuando se crea.

Por ejemplo, estás escribiendo un juego en el que un personaje puede correr, nadar y volar. Si tu personaje se metió en el agua, entonces es razonable limitar su comportamiento en el agua: ahora no puede disparar, pero todavía tiene algunas acciones: nadar hacia adelante, hacia la derecha, hacia la izquierda, etc.

El estado de tu personaje puede ser descrito por un objeto State, que tiene métodos que pueden ser llamados y que harán algo. Y después de que tu personaje se metió en el agua, simplemente cambias la referencia a otro objeto de estado dentro de él, y cambia su estado.

2.2 estrategia

La estrategia es un patrón de diseño de comportamiento para definir una familia de algoritmos, encapsular cada uno y hacerlos intercambiables. Esto le permite elegir un algoritmo definiendo la clase apropiada.

El patrón de estrategia le permite cambiar el algoritmo seleccionado independientemente de los objetos de cliente que lo utilicen.

Estrategia

El patrón de estrategia le permite utilizar diferentes reglas comerciales o algoritmos según el contexto. Se utiliza en los casos en que se deben utilizar diferentes algoritmos en el mismo lugar dependiendo del estado actual del sistema (o su entorno).

Fortalezas:

  • encapsulación de la implementación de varios algoritmos, el sistema se vuelve independiente de posibles cambios en las reglas comerciales;
  • llamando a todos los algoritmos de una manera estándar;
  • no usar interruptores y/o sentencias condicionales.

Este patrón es algo similar al patrón Estado, pero aquí el énfasis no está en el estado, sino en el comportamiento. Digamos que un personaje en tu juego puede cambiar de arma. Luego, al cambiar de arma, simplemente puede cambiar la referencia al objeto que describe cómo funciona esta arma.

2.3 Método de plantilla

Método de plantilla

Clase abstracta (clase abstracta): define las operaciones abstractas que se reemplazan en los herederos para implementar los pasos del algoritmo; implementa un método de plantilla que define el esqueleto del algoritmo. El método de plantilla llama a las operaciones reemplazadas y otras definidas en la clase Abstract.

Clase concreta (clase concreta): implementa las operaciones reemplazadas de la manera necesaria para la implementación. La clase Concrete asume que los pasos invariantes del algoritmo se realizarán en AbstractClass.

Este patrón se usa a menudo cuando es necesario:

  • Uso único de la parte invariable del algoritmo, dejando la parte cambiante a criterio de los herederos.
  • Localización y aislamiento de código común a varias clases para evitar duplicaciones.
  • Permita que los herederos amplíen el código solo en ciertos lugares.

Sí, este patrón describe el uso de un par: una clase abstracta y su implementación.

2.4 Cadena de responsabilidad

La cadena de responsabilidad es un patrón de diseño de comportamiento diseñado para organizar los niveles de responsabilidad en un sistema.

cadena de responsabilidad

Se recomienda el uso de la plantilla en condiciones en las que:

  • en el sistema desarrollado existe un grupo de objetos que pueden procesar mensajes de cierto tipo;
  • todos los mensajes deben ser procesados ​​por al menos un objeto del sistema;
  • los mensajes en el sistema se procesan según el esquema “procesarlo usted mismo o pasarlo a otro”, es decir, algunos mensajes se procesan en el nivel en el que se recibieron, mientras que otros se reenvían a objetos de otro nivel.

2.5 Recuerdo

Keeper (Memento) es un patrón de diseño de comportamiento que le permite corregir y guardar el estado interno de un objeto sin violar la encapsulación para que pueda restaurarse a este estado más adelante.

Guardián (Recuerdo)

El patrón Guardián se usa cuando:

  • es necesario guardar una instantánea del estado del objeto (o parte de él) para su posterior restauración;
  • La interfaz directa para obtener el estado de un objeto expone los detalles de implementación y rompe la encapsulación del objeto.