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 — pot apărea tipuri noi de ascultători fără să se schimbe nici măcar o linie în publicator.


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

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

Publici o dată, se livrează tuturor

Un singur apel Alert(), două livrări. Monitorul habar nu are ce este un email sau un panou de control — știe doar despre lucruri care pot fi notificate.

Prompt
Scrie un program Go 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: program Go ș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, invalidarea cache-ului, fluxuri de activitate.

Renunță la el când există exact un singur receptor, fix — apelează-l direct. În programele Go concurente, ia în calcul mai întâi canalele: ele transportă evenimente, având backpressure și select incluse.


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 — la întrebarea „cine reacționează la asta?” trebuie să cauți răspunsul; un abonat lent sau care eșuează poate bloca bucla de notificare; dezabonările uitate produc scurgeri de memorie.