Treci la conținutul principal

Ce este

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

Publicatorul depinde doar de o interfață mică de abonat — tipuri noi de ascultători apar fără să se schimbe o linie în publicator.


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

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

Publici o dată, livrezi tuturor

Un singur apel alert(), două livrări: email către [email protected]: disc aproape plin și tabloul de bord arată: disc aproape plin. Monitorul nu are idee ce este un email sau un tablou de bord — știe doar lucruri care pot fi notificate.

Prompt
Scrie un program TypeScript cu șablonul Observer: o interfață Subscriber cu o metodă notify, o clasă de abonat EmailAlert și una Dashboard, precum și un publicator Monitor cu metodele subscribe și alert, care notifică fiecare abonat despre un eveniment. Abonează-le pe amândouă și declanșează o singură alertă.
Ieșire: program TypeScript și rezultatul capturat
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, iar 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. Și, înainte să scrii singur lista, uită-te la ce îți oferă deja platforma: Node.js vine cu EventEmitter, iar browserele au EventTarget — ambele sunt acest șablon, deja scris și testat.


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 de memorie.