Designpatterns
Observer Pattern
Das Observer-Muster ermöglicht es, Änderungen an einem Objekt automatisch an abhängige Objekte weiterzugeben.
Was ist das Observer-Muster?
Das Observer-Muster (Beobachter-Muster) ist ein Entwurfsmuster, das beschreibt, wie ein Objekt (Subject) eine Gruppe von anderen Objekten (Observer) automatisch informieren kann, wenn sich etwas ändert.
Sobald sich der Zustand des Subjekts ändert, werden alle registrierten Beobachter benachrichtigt.
Beispiel aus dem Alltag
Stell dir eine Wetterstation vor:
- Die Wetterstation misst Temperatur und Luftfeuchtigkeit → das ist das Subject.
- Mehrere Displays oder Apps wollen die aktuellen Werte sehen → das sind die Observer.
Wenn sich das Wetter ändert, sollen alle Anzeigen automatisch die neuen Daten bekommen – ohne dass sie ständig selbst nachfragen müssen.
Aufbau in Java (vereinfacht)
// Observer-Interface – alle Beobachter müssen das können
interface Beobachter {
void aktualisieren();
}
// Das Subject (z. B. Wetterstation)
class WetterStation {
List<Beobachter> beobachter = new ArrayList<>();
void registriere(Beobachter b) {
beobachter.add(b);
}
void benachrichtigeAlle() {
for (Beobachter b : beobachter) {
b.aktualisieren(); // alle Observer bekommen Bescheid
}
}
}
Beispielhafte Nutzung:
class WetterDisplay implements Beobachter {
@Override
public void aktualisieren() {
System.out.println("Wetteranzeige wird aktualisiert!");
}
}
class Main {
public static void main(String[] args) {
WetterStation station = new WetterStation();
WetterDisplay display1 = new WetterDisplay();
WetterDisplay display2 = new WetterDisplay();
station.registriere(display1);
station.registriere(display2);
// Änderung bei der Wetterstation:
station.benachrichtigeAlle();
// Ausgabe: beide Displays werden aktualisiert
}
}
Vorteile des Observer-Musters:
Vorteil | Bedeutung |
---|---|
Lose Kopplung | Subject kennt Observer nur über das Interface – sehr flexibel |
Automatische Benachrichtigung | Kein ständiges Nachfragen nötig (→ weniger Code & Fehler) |
Einfach erweiterbar | Neue Observer hinzufügen, ohne alte zu ändern |
Echtzeit-Reaktion möglich | Super für UI, Events, Games, Sensoren usw. |
Ein Subject weiß: "Ich sag allen Bescheid, die mir zuhören wollen."
→ Das macht Programme reaktiv, flexibel und wartbar.
→ Das macht Programme reaktiv, flexibel und wartbar.