🔄 Chain of Responsibility - EmilioCrespoPeran/pattern-designs GitHub Wiki
📚 Descripción del patrón
El patrón Chain of Responsibility (Cadena de Responsabilidad) permite que múltiples objetos tengan la oportunidad de procesar una petición, pasando la solicitud a lo largo de una cadena de manejadores hasta que uno de ellos se haga cargo de ella.
Es especialmente útil cuando:
- No se sabe de antemano cuál objeto debe encargarse de una petición.
- Se quiere evitar acoplar el emisor de la solicitud al receptor concreto.
- Se desea construir flujos de procesamiento flexibles y dinámicos.
🧠 Participantes
Participante | Rol |
---|---|
Manejador (Handler) | Define la interfaz para procesar la solicitud y mantener una referencia al siguiente manejador. |
Manejadores concretos | Implementan la lógica específica y deciden si procesan o delegan. |
Cliente | Inicia la solicitud y la pasa al primer manejador. |
🧩 Enunciado del ejercicio: Sistema de Soporte Técnico
Implementa un sistema de soporte técnico escalonado que puede recibir solicitudes de soporte técnico clasificadas por nivel:
- Nivel 1: Consultas básicas (resetear contraseña, preguntas comunes).
- Nivel 2: Problemas intermedios (errores de aplicación, configuración).
- Nivel 3: Soporte especializado (fallos técnicos, bugs complejos).
Cada nivel debe intentar resolver el problema. Si no lo puede resolver, lo pasa al siguiente nivel.
🎯 Objetivo
Diseñar esta lógica utilizando el patrón Chain of Responsibility para que las solicitudes pasen automáticamente por la cadena de soporte hasta que alguien la pueda manejar.
✅ Requisitos del ejercicio
- Crear una interfaz
ManejadorSoporte
:
public interface ManejadorSoporte {
String manejarSolicitud(Solicitud solicitud);
}
- Crear clases concretas:
SoporteNivel1
SoporteNivel2
SoporteNivel3
- Cada clase debe:
- Intentar manejar la solicitud según el nivel asignado.
- Si no es su nivel, pasarla al siguiente manejador (usando una referencia al siguiente en la cadena).
- Crear una clase
Solicitud
con propiedades:
int nivel
(1, 2 o 3)String descripcion
- Permitir que el cliente configure la cadena de soporte y pase solicitudes.
🧪 Test
Los tests para este ejercicio los puedes encontrar en src/test/java/es/cresdev/patterns/chainofresponsability/soportetecnico/ChainOfResponsabilitySoporteTecnicoTests.java