Patrón Chain of Responsibility

¿Qué es el Patrón Chain of Responsibility?

El Chain of Responsibility es un patrón de diseño de comportamiento que permite enviar una solicitud a través de una cadena de objetos, donde cada objeto decide si maneja la solicitud o la pasa al siguiente en la cadena. Esto reduce el acoplamiento entre el emisor y los receptores de la solicitud.

Código de Ejemplo en JavaScript

            
class Handler {
  setNext(handler) {
    this.nextHandler = handler;
    return handler;
  }

  handle(request) {
    if (this.nextHandler) {
      return this.nextHandler.handle(request);
    }
    return null;
  }
}

class BasicSupport extends Handler {
  handle(request) {
    if (request === "basic") {
      console.log("BasicSupport: Manejo la solicitud básica.");
      return true;
    }
    return super.handle(request);
  }
}

class AdvancedSupport extends Handler {
  handle(request) {
    if (request === "advanced") {
      console.log("AdvancedSupport: Manejo la solicitud avanzada.");
      return true;
    }
    return super.handle(request);
  }
}

class ExpertSupport extends Handler {
  handle(request) {
    if (request === "expert") {
      console.log("ExpertSupport: Manejo la solicitud experta.");
      return true;
    }
    return super.handle(request);
  }
}

// Configuración de la cadena
const basic = new BasicSupport();
const advanced = new AdvancedSupport();
const expert = new ExpertSupport();

basic.setNext(advanced).setNext(expert);

// Enviar solicitudes
console.log("Solicitud: basic");
basic.handle("basic");

console.log("\nSolicitud: advanced");
basic.handle("advanced");

console.log("\nSolicitud: expert");
basic.handle("expert");

console.log("\nSolicitud: unknown");
basic.handle("unknown");

        

Casos de Uso

  • Sistemas de soporte técnico con niveles (básico, avanzado, experto).
  • Procesamiento de eventos en un flujo donde cada paso tiene responsabilidades específicas.
  • Validaciones de datos complejas en formularios o pipelines.

Patrones Relacionados

  • Command: Se centra en encapsular una solicitud como un objeto.
  • Strategy: Ofrece diferentes implementaciones para un comportamiento específico.
  • Observer: Notifica a múltiples objetos sobre un cambio de estado.
Whatsapp Mentores Tech