🔄 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

  1. Crear una interfaz ManejadorSoporte:
public interface ManejadorSoporte {
    String manejarSolicitud(Solicitud solicitud);
}
  1. Crear clases concretas:
  • SoporteNivel1
  • SoporteNivel2
  • SoporteNivel3
  1. 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).
  1. Crear una clase Solicitud con propiedades:
  • int nivel (1, 2 o 3)
  • String descripcion
  1. 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