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:

VorteilBedeutung
Lose KopplungSubject kennt Observer nur über das Interface – sehr flexibel
Automatische BenachrichtigungKein ständiges Nachfragen nötig (→ weniger Code & Fehler)
Einfach erweiterbarNeue Observer hinzufügen, ohne alte zu ändern
Echtzeit-Reaktion möglichSuper 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.