Obserwator to czynnościowy wzorzec projektowy, którego celem jest automatyczne informowanie wielu obiektów o zmianie stanu innego obiektu. Obiekt obserwowany nazywa się zwykle Subject lub Publisher, a obiekty zainteresowane zmianami to Observerzy lub Subscriberzy.
Na czym polega?
Obiekt obserwowany przechowuje listę obserwatorów. Gdy jego stan się zmieni, wywołuje metodę powiadamiającą, np. notify(), a każdy obserwator może zareagować na zmianę.
Typowe elementy wzorca:
- Subject - obiekt posiadający stan i listę obserwatorów,
- Observer - obiekt oczekujący na informację o zmianie,
- subscribe/register - zapisanie obserwatora,
- unsubscribe/remove - usunięcie obserwatora,
- notify - powiadomienie obserwatorów.
Zastosowanie w aplikacjach WEB
W aplikacjach webowych Obserwator jest używany m.in. do:
- aktualizacji interfejsu po zmianie danych,
- obsługi zdarzeń użytkownika,
- reaktywnego programowania,
- synchronizacji widoku z modelem danych.
Przykład idei:
class Subject {
constructor() {
this.observers = [];
}
subscribe(observer) {
this.observers.push(observer);
}
notify(data) {
this.observers.forEach(observer => observer(data));
}
}
const subject = new Subject();
subject.subscribe(data => console.log('Zmiana:', data));
subject.notify('nowy stan');
Najważniejsze do egzaminu
Wzorzec Obserwator służy do informowania obiektów o zmianie stanu innych obiektów. Nie służy bezpośrednio do dostosowywania interfejsu do odbiorców, wysyłania wyjątków ani zarządzania funkcjami synchronicznymi.