Treci la conținutul principal

Ce este

Șablonul Observer permite unui obiect să anunțe evenimente către mai mulți abonați fără să știe cine sunt aceștia. Abonații se înregistrează o singură dată; de atunci, fiecare eveniment ajunge automat la toți.

Publicatorul depinde doar de o interfață mică de abonat — apar tipuri noi de ascultători fără să se schimbe o linie în publicator. PHP oferă chiar interfețele gata făcute SplSubject și SplObserver pentru acest șablon; o interfață mică proprie, ca cea de mai jos, se citește la fel de bine.


Exemplu: o singură alertă, toți abonații

Monitorul păstrează o listă de abonați. Când se întâmplă ceva, notifică toată lista — astăzi o alertă pe email și un tablou de bord; mâine un mesaj de chat, doar abonându-l.

Publică o dată, livrează tuturor

Un singur apel alert(), două livrări. Monitorul nu are nicio idee ce este un email sau un tablou de bord — știe doar lucruri care pot fi notificate.

Prompt
Scrie un script PHP cu șablonul Observer: o interfață Subscriber cu notify, un abonat EmailAlert și un abonat Dashboard, plus un publicator Monitor cu metodele subscribe și alert, care notifică fiecare abonat despre un eveniment. Abonează-i pe amândoi și declanșează o singură alertă.
Ieșire: script PHP
Publish once, deliver to all

Când să-l folosești

Folosește-l când mai multe părți trebuie să reacționeze la aceleași evenimente și lista celor care reacționează se schimbă — actualizări de interfață, alertare, invalidare de cache, fluxuri de activitate.

Renunță la el când există exact un singur destinatar, fix — apelează-l direct. Un dispecer de evenimente într-o aplicație PHP mai mare este exact acest șablon, crescut: evenimente cu nume, mulți ascultători, un singur punct de expediere.


Avantaje și dezavantaje

Avantaje: publicatorul și abonații rămân decuplați; abonații apar și dispar în timpul execuției; reacțiile noi nu cer modificări în publicator.

Dezavantaje: fluxul devine invizibil — „cine reacționează la asta?” cere căutare; un abonat lent sau care eșuează poate bloca bucla de notificare; dezabonările uitate produc scurgeri.