BEHAVIORAL

Chain of Responsibility

Evitare di accoppiare il mittente di una richiesta al suo ricevitore dando a più oggetti la possibilità di gestire la richiesta. Concatenare gli oggetti riceventi e passare la richiesta lungo la catena finché un oggetto la gestisce.

Il Problema

Quando hai molteplici handler per una richiesta e non sai in anticipo quale la gestirà.

La Soluzione

Creare catena di handler. Ogni handler decide se processare la richiesta o passarla al prossimo nella catena.

Struttura

Handler interface con metodo handleRequest() e riferimento a next handler. ConcreteHandler implementa handleRequest() e può passare al next.

Partecipanti:
Handler - interfaccia per gestire richieste e accedere al successore
ConcreteHandler - gestisce richieste per cui è responsabile, altrimenti passa al successore
Client - inizia la richiesta a un Handler nella catena
Esempi di Codice

Chain of Responsibility per Support Tickets

Sistema di supporto con livelli (Level 1, Level 2, Manager).

JAVASCRIPT
Loading...
Esempi nel Mondo Reale
Middleware in Express.js
Event bubbling in DOM
Exception handling (try-catch chain)
Logging frameworks (log levels)
Authentication/Authorization pipelines
Quando Usarlo
Quando più oggetti possono gestire una richiesta
Quando non sai quale handler gestirà la richiesta
Quando vuoi disaccoppiare mittente e ricevitore
Quando l'insieme di handler cambia dinamicamente
Quando NON Usarlo
Quando sai esattamente chi deve gestire la richiesta
Quando ogni richiesta deve essere gestita
Quando la catena diventa troppo lunga
Pattern Correlati