Chain of Responsibility
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
Según el libro "Patrones de Diseño" el patrón Chain of Responsibility "evita acoplar el emisor de una petición a su receptor, dando a más de un objeto la posibilidad de responder a la petición. Encadena los objetos receptores y pasa la petición a través de la cadena hasta que es procesada por algún objeto".
Manejador:
define una interfaz para tratar las peticiones.
(opcional) implementa el enlace al sucesor.
ManejadorConcreto:
trata las peticiones de las que es responsable.
puede acceder a su sucesor.
si el ManejadorConcreto puede manejar la petición, lo hace; en caso contrario la reenvía a su sucesor.
Cliente:
inicializa la petición a una variable ManejadorConcreto de la cadena.
No se observan impedimentos para su implementación en Go.
La implementación de la clase abstracta Manejador debe reemplazarse por una interface dado que no existe la herencia de clase en Go.
Si fuese necesario que Manejador implementase código común a los ManejadoresConcretos se podrá definir un tipo de dato adicional (ManejadorComun por ejemplo) y el mismo deberá implementarse en cada ManejadorConcreto mediante el uso de la composición.
En este ejemplo se definen dos receptores distintos de mensajes. Uno para mensajes de alta prioridad y otro para mensajes de baja prioridad. El mensaje enviado por el cliente es transmitido a través de la cadena de receptores y cada receptor trata o no el mensaje de acuerdo a su prioridad.
Implementación:
Se puede probar la implementación del patrón de la siguiente forma:
|
Atención: Esta publicación se encuentra abandonada. Puede acceder a la versión vigente en