PATRONES_COMPORTAMIENTO - raca1487/Desing_Patterns GitHub Wiki
Patrón de diseño de comportamiento que nace de la necesidad de evitar los valores nulos que puedan originar error en tiempo de ejecución. Básicamente lo que este patrón propone es utilizar instancias que implementen la interface requerida pero con un cuerpo vacío en lugar de regresar un valor null.
Vamos a crear una clase abstracta AbstractCustomer que defina operaciones, clases concretas que la implementen y una clase de fábrica CustomerFactory para devolver objetos RealCustomer o NullCustomer en función del nombre del cliente que se le pase.
Patrón de diseño de comportamiento que permite definir un mecanismo de suscripción para notificar a varios objetos sobre cualquier evento que le suceda al objeto que están observando.
Se utiliza cuando existe una relación OneToMany entre los objetos, de manera que si se modifica un objeto, sus objetos dependientes se notificarán automáticamente.
Patrón de diseño de comportamiento que convierte una solicitud en un objeto independiente que contiene toda la información sobre la solicitud. Esta transformación permite parametrizar los métodos con diferentes solicitudes, retrasar o poner en cola la ejecución de una solicitud y soportar operaciones que no se pueden realizar.
Patrón de diseño de comportamiento que define el esqueleto de un algoritmo en la superclase pero permite que las subclases sobrescriban pasos del algoritmo sin cambiar su estructura.
Este patrón sugiere:
-
Dividir un algoritmo en una serie de pasos.
-
Convertir estos pasos en métodos.
-
Colocar una serie de llamadas a esos métodos dentro de un único método plantilla
template()
. -
Los pasos pueden ser abstractos, o contar con una implementación por defecto.
Para utilizar el algoritmo, el cliente debe aportar su propia subclase, implementar todos los pasos abstractos y sobrescribir algunos de los opcionales si es necesario (pero no el propio método
template()
).
Diferencia entre Template Method y Sobrecarga Polimórfica:
- En el método template está definida la lógica y no se puede cambiar.
- En la polimorfia sí se puede cambiar la lógica, es decir, sobreescribir los métodos de la herencia.
Una lambda es una interfaz con un único método abstracto. Esta interfaz puede contener otros métodos (propios o heredados), pero solo uno puede ser abstracto. A este tipo de interfaz se la llama interfaz funcional, y al uso de lambdas se le llama programación funcional.
Una interface funcional se diferencia de una interface convencional en que únicamente tiene un método abstracto.
Patrón de diseño de comportamiento que permite pasar solicitudes a lo largo de una cadena de manejadores. Al recibir una solicitud, cada manejador decide si la procesa o si la pasa al siguiente manejador de la cadena.
Se aplicará este patrón cuando:
- Hay más de un objeto que puede manejar una petición, y el manejador no se conoce a priori, sino que debería determinarse automáticamente.
- Se quiere enviar una petición a un objeto entre varios sin especificar explícitamente el receptor.
- El conjunto de objetos que pueden tratar una petición debería ser especificado dinámicamente.
Patrón de diseño de concurrencia en el que se trata de separar la invocación de un método de su ejecución. Por lo general, un objeto activo proporciona métodos síncronos y ejecuta las llamadas a métodos de forma asíncrona. Un objeto activo normalmente tiene su propio hilo de control.
Este patrón es útil para refactorizar proyectos heredados mediante la introducción de la capacidad de simultaneidad.