Treci la conținutul principal

Ce este

Șablonul Lanț de responsabilitate (Chain of Responsibility) transmite o cerere de-a lungul unui lanț de handleri. Fiecare handler fie se ocupă de cerere, fie o predă 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 botul de chat. Ce nu poate rezolva botul ajunge la suportul tehnic; ce nu poate rezolva suportul tehnic ajunge la manager, care se ocupă de tot ce primește.

Transmite mai departe până când cineva poate

„no internet” parcurge un singur pas și se oprește la suportul tehnic; cererea „refund request” parcurge tot lanțul până la manager. Apelantul a scris de ambele ori aceeași linie.

Prompt
Scrie un program Python cu un Lanț de responsabilitate: o clasă de date (dataclass) Handler cu un nume, o funcție can_fix și o referință next_handler. Construiește un lanț de suport format din botul de chat, suportul tehnic și managerul (care rezolvă orice). 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: program Python complet
Pass it on until someone can

Când să-l folosești

Folosește-l când mai mulți participanți ar putea trata o cerere și nu se știe dinainte care este cel potrivit — escaladarea în suport, middleware, tratarea evenimentelor, fluxuri de aprobare.

Renunță la el când handlerul este mereu cunoscut — apelează-l direct. Un lanț cu o singură verigă, sau unul care se termină mereu la aceeași verigă, este doar un apel de funcție obișnuit deghizat.


Avantaje și dezavantaje

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

Dezavantaje: nu există nicio garanție că cineva tratează cererea — un lanț întrerupt o înghite în tăcere; urmărirea unei cereri prin multe verigi face depanarea mai lentă.