Das observer pattern (auch listener pattern gennant oder auf deutsch Beobachter-Muster) ist ein Entwurfsmuster (Englisch pattern) aus dem Bereich der Softwareentwicklung und weitverbreitet.
In diesem Muster gibt es zwei Akteure: Ein Subjekt, welches beobachtet wird und ein oder mehrere Beobachter, die über Änderungen des Subjektes informiert werden wollen. Das Observer-Patterns gibt vor, dem zu beobachtenden Subjekt die Aufgabe aufzutragen, die Beobachter bei einer Änderung über die Änderung zu informieren. Die Beobachter müssen nicht mehr in regelmäßigen Abständen beim Subjekt anfragen, sondern können sich darauf verlassen, dass sie eine Nachricht über eine Änderung erhalten.
Beobachter müssen sich, bevor Sie von einem Subjekt benachrichtigt werden, bei diesem Subjekt registrieren. Jedes Subjekt verwaltet intern eine Liste von Beobachtern, die es bei einer Änderung seiner selbst nacheinander benachrichtigt. Neben der Methode zum Registrieren wird standardmäßig auch eine Methode zum Deregistrieren angeboten. Über diese Methode können sich Beobachter wieder abmelden, so dass sie aus der internen Liste entfernt werden und nicht mehr benachrichtigt werden.
Bei einer Zustandsänderung eines Objekts besteht für Beobachter ein Interesse an dem neuen Zustand. Zur Informationsübermittlung stehen zwei grundlegende Mechanismen zur Verfügung: Die proaktive Übermittlung des neuen Zustands durch das Objekt (Push) oder die reaktive Abfrage durch den Beobachter (Pull). Während Push-Mechanismen zu einer potenziellen Informationsüberlastung führen können, insbesondere bei Objekten mit vielen Zuständen, erfordern Pull-Mechanismen zusätzliche methodische Implementierungen im Objekt. Dies ist vor allen Dingen für sehr große Subjekte, die viele Zustände beinhalten der Fall. Auch muss für diesen Fall ein geeignetes Austauschformat, meist eine eigene Klasse, in deren Objekte der Zustand verpackt wird, definiert werden.
Das Observer-Pattern wird in der Java-API durch das Interface Observer und die abstrakte Klasse Observable unterstützt. Dies abstrakte Klasse Observable innerhalb der Java-API beinhaltet schon Methoden, um Beobachter zu benachrichtigen, so dass Code gespart werden kann. Die abstrakte Klasse Observable in der Java-API bietet eingebaute Mechanismen zur Benachrichtigung von registrierten Beobachtern, was die manuelle Implementierung dieser Funktionalität überflüssig macht.