Wzorzec Observer jest wzorcem operacyjnym. Definiuje relację jeden do wielu między obiektami, gdzie obiekty obserwujące zostają powiadomione o zmianie stanu obiektu obserwowanego. Obiekty obserwujące nie muszą wiedzieć, że istnieją inne obiekty obserwujące to samo, oraz same mogą decydować czy chcą być powiadamiane o zmianach stanu czy też nie.

Aby zrealizować takie zadanie wymagane jest utworzenie dwóch interfejsów: Obserwator i Obserwowany. Pierwszy ma zdefiniowaną metodę, która jest wykonywana gdy obiekt obserwowany zmieni stan. Interfejs obiektu obserwowanego musi posiadać trzy metody: getter i setter dla obserwatorów oraz metodę powiadamiającą wszystkich zarejestrowanych obserwatorów o zmianie stanu.

Wyobraźmy sobie że chcemy dostawać informację o każdej zmianie w serwisie WWW. Za wyświetlanie danych na stronie jest odpowiedzialna klasa SiteRenderer, która metodą updateContent dodaje nowy materiał do treści strony.

Chcemy być informowani o zmienie treści serwisu, więc klasa SiteRenderer będzie naszym obserwowanym obiektem. Tworzymy dwa interfejsy: Obserwator i Obserwowany:

Implementujemy interfejs obserwowanego do SiteRenderer:

Teraz każdy obiekt który ma być poinformowany o zmianie stanu obiektu obserwowanego musi dopisać się do jego listy obserwatorów, a obserwator będzie go o każdej zmianie informował poprzez wywołanie metody aktualizuj();

Diagram wzroca:


.