Ein Observer baut eine Beziehung zwischen einem Subjekt und seinen Beobachtern auf, so dass Zustandsänderungen mitgeteilt werden. Beispiele: Die GUI-Darstellung muss Datenänderungen folgen, Dialogelemente müssen Anwenderaktionen mitteilen. Observer besteht aus den Teilen:
- Das Interface Observer definiert die Methode update(), die bei Zustandsänderungen aufgerufen wird
- Die Klasse Subject definiert Methoden zur Registrierung und Deregistrierung von Observern (z.B. attach() und detach()) und ruft bei Zustandsänderungen die update()-Methoden der registrierten Observer auf
- Konkrete Subjekte werden von Subject abgeleitet und melden ihre Zustandsänderungen über die Methode fireUpdate()
- Konkrete Beobachter implementieren das Interface Observer, registriert sich bei den gewünschten Subjekten und werden über update() über Zustandsänderungen der Subjekte informiert In Java ist das Observer Design Pattern sehr verbreitet, meistens in einer zum "Delegation Based Event Handling" erweiterten Version: Die Beobachter werden als Listener bezeichnet, die von verschiedenen Typen sein können und mehrere update()-Varianten für verschiedene Ereignisse enthalten können. Um die Ereignisse besser bearbeiten zu können, werden den update()-Methoden Listener-spezifische Ereignisobjekte mit übergeben.