Patrones de diseño orientados a objetos explicados utilizando ejemplos prácticos
Patrones de comportamiento
Este tipo de patrón se refiere a la comunicación entre objetos. En la mayoría de los casos, las dependencias entre los objetos que se comunican se reducen a través de estos patrones, lo que conduce a un mejor diseño de software.
cadena de responsabilidad
Este patrón crea una cadena de objetos receptores para una solicitud. Evita el acoplamiento del remitente de una solicitud al receptor y da a varios objetos la oportunidad de manejar la solicitud. Los objetos de Recepción están vinculados entre sí., En el siguiente ejemplo se construye una cadena de unidades de middleware. La solicitud, que contiene correo electrónico y contraseña, se reenvía en la cadena. Se pueden agregar fácilmente nuevos elementos en la cadena.
el Comando
En el comando patrón de un objeto se utiliza para encapsular toda la información necesaria para realizar una acción o desencadenar un evento en un momento posterior. Como se muestra a continuación, ActionOpen define la acción, así como el objeto en el que se ejecuta la acción., No se necesita más información y otro objeto, aquí menú, puede ejecutar la acción.
Intérprete
El Intérprete patrón define una representación de la gramática de una lengua y proporciona la capacidad de interpretar las frases de ese idioma. En el fragmento de código debajo de un objeto Plus puede interpretar «operand1 + operand2» y sabe qué hacer con esa expresión. Se pueden agregar más intérpretes sin cambiar demasiado la estructura. El analizador entonces usa intérpretes para entender la entrada.,
Iterator
El Iterador se utiliza para atravesar un contenedor de datos para acceder al contenedor de los elementos sin necesidad de conocer la estructura subyacente. Además, se pueden agregar nuevas variantes transversales sin cambiar la interfaz de los objetos o la estructura de datos en sí.
El ChannelSurfer, representado a continuación, puede acceder a los canales de manera consecutiva. El objeto RemoteControl no necesita preocuparse por la organización de los canales. Un RandomChannelSurfer, por ejemplo, se puede agregar sin muchos problemas.,
Mediador
Si dos o más objetos de la necesidad de cooperar, el modelo de Mediador podría ser aplicado. Especialmente si los objetos no se conocen entre sí, si no deben estar estrechamente acoplados o si su interacción es compleja, este patrón puede ayudar.
en el ejemplo a continuación hay cierta interacción necesaria entre los elementos de la interfaz de usuario. Esta interacción está sucediendo a través del diálogo de autenticación como mediador. De esta manera, la interacción no se define en uno de los objetos participantes, sino que se extrae en el mediador.,
Memento
El Recuerdo patrón es útil si un determinado estado de un objeto debe ser guardado para su posterior uso. Por lo tanto, no viola la encapsulación de los detalles de implementación de ese objeto. Por ejemplo, se puede utilizar para la implementación de un mecanismo de deshacer.
Observador
En el observador patrón observador objetos suscribirse a un objeto observado para ser notificado cada vez que los cambios observables de sus datos., Los observadores se acoplan libremente y se pueden agregar y eliminar en tiempo de ejecución.con respecto a cómo el observador finalmente obtiene los datos del observable, hay dos variantes: push y pull. El siguiente código muestra la variante pull, que es más flexible, ya que en este caso el observable no necesita saber cómo desea recibir los datos, pero el observador puede obtener los datos como desee.
Estado
El Estado patrón permite que un objeto de modificar su comportamiento cuando su estado interno de los cambios., Este patrón es similar al patrón de estrategia, pero en este caso se decide internamente cómo se comportan los objetos. Esto es especialmente útil si las condiciones complejas definen cómo debe comportarse el objeto. Se pueden agregar nuevos Estados independientemente de los Estados existentes.
Estrategia
En el contexto de la Estrategia de patrón existen múltiples variantes de un algoritmo donde una variante es el elegido para ser ejecutado en tiempo de ejecución.,
en el siguiente ejemplo, un objeto Compressor se puede utilizar con uno de los dos algoritmos diferentes definidos en tiempo de ejecución. El método que ejecuta la acción (createArchive) aplica el algoritmo elegido.