Treci la conținutul principal

Ce este

Șablonul Chain of Responsibility (lanț de responsabilitate) trece o cerere pe un lanț de handlere. Fiecare handler fie se ocupă de cerere, fie o dă următorului. Expeditorul cunoaște doar prima verigă — niciodată pe cel care o va rezolva de fapt.


Exemplu: o linie de suport

O problemă intră la chat bot. Ce nu poate rezolva botul ajunge la suportul tehnic; ce nu poate rezolva suportul tehnic ajunge la manager, care se ocupă de tot ce îi vine.

Pasează mai departe până poate cineva

Problema „no internet” face un singur pas și se oprește la suportul tehnic; cererea de rambursare parcurge tot lanțul până la manager. Apelantul a scris aceeași singură linie în ambele cazuri. Apelul nullsafe $this->next?->handle() pur și simplu se oprește la capătul lanțului.

Prompt
Scrie un script PHP cu un Lanț de responsabilitate: o clasă Handler cu un nume, o închidere canFix și un următor handler care poate fi null. Construiește un lanț de suport din chat bot, suport tehnic și manager (care rezolvă tot). Trimite o problemă pe care o poate rezolva veriga din mijloc și una care ajunge până la manager, afișând fiecare pas.
Ieșire: script PHP
Pass it on until someone can

Când să îl folosești

Folosește-l atunci când mai multe părți ar putea trata o cerere și nu se știe din timp care este cea potrivită — escaladarea la suport, middleware, tratarea evenimentelor, fluxuri de aprobare.

Renunță atunci când handlerul este întotdeauna cunoscut — apelează-l direct. Un lanț cu o singură verigă, sau unul care se termină mereu la aceeași verigă, este un simplu apel de funcție costumat.


Avantaje și dezavantaje

Avantaje: expeditorul și receptorii sunt decuplați; verigile pot fi adăugate, eliminate și reordonate liber; fiecare handler rămâne mic.

Dezavantaje: nu există garanția că cineva tratează cererea — un lanț rupt o înghite în silențiu; urmărirea unei cereri prin multe verigi face depanarea mai lentă.