Obserwator (ang. Observer) to wzorzec projektowy, którego celem jest automatyczne informowanie wielu obiektów o zmianie stanu innego obiektu. Obiekt obserwowany nazywa się często Subject lub Observable, a obiekty reagujące na zmianę to Observers.
Na czym polega?
Obiekt obserwowany przechowuje listę obserwatorów. Gdy jego stan się zmienia, wywołuje metodę powiadamiającą wszystkich zarejestrowanych obserwatorów. Dzięki temu obiekty nie muszą stale sprawdzać, czy coś się zmieniło.
Typowe zastosowania
W aplikacjach WEB i GUI wzorzec Obserwator jest używany m.in. do:
- obsługi zdarzeń, np. kliknięcia przycisku,
- aktualizacji widoku po zmianie danych,
- powiadamiania komponentów o zmianach stanu aplikacji,
- implementacji mechanizmów subskrypcji.
Prosty przykład w JavaScript
class Subject {
constructor() {
this.observers = [];
}
subscribe(observer) {
this.observers.push(observer);
}
notify(data) {
this.observers.forEach(observer => observer.update(data));
}
}
class Observer {
update(data) {
console.log('Otrzymano zmianę:', data);
}
}
const subject = new Subject();
const observer = new Observer();
subject.subscribe(observer);
subject.notify('Nowy stan danych');
Najważniejsze do egzaminu
Celem wzorca Obserwator jest informowanie obiektów o modyfikacji stanu innych obiektów. Nie służy on bezpośrednio do obsługi wyjątków, zarządzania kodem synchronicznym ani personalizacji interfejsu użytkownika.