Wzorzec Obserwator

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

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.