homeSoftwaredesign Softwaredesign: Beobachter Prof. Dr. Uwe Schmidt FH Wedel

Beobachter

weiter

weiter

Beobachter

Klassifizierung
objektbasiertes Verhaltensmuster
weiter
Zweck
Definiere 1-zu-n Abhängigkeit zwischen Objekten
und benachrichtige alle Objekte, wenn sich der Zustand ändert.
Kommunikation zwischen lose gekoppelten Objekten.
Koppelung kann dynamisch hergestellt und aufgelöst werden.
weiter
Alias
Observer
weiter
Motivation
Trennung der zu verarbeitenden Daten von der externen Darstellung.
In einer MVC-Architektur werden das Modell und die Präsentation (view) getrennt
Konsequenzen:
das Modell bleibt frei von Ausgabe-Anweisungen
die Präsentation kann dynamisch ausgetauscht werden
Mit unterschiedlichen Standardbausteinen können die internen Daten auch mehrfach und unterschiedlich angezeigt werden.
weiter
Beispiel
eine Uhr besitzt einen internen Zustand
kann aber auf viele Arten angezeigt werden: Text, analog, ...
weiter
Anwendbarkeit
wenn die Änderung eines Objekts die Änderung beliebig vieler anderer Objekte verlangt
wenn der Sender nicht wissen soll, wer die Empfänger sein sollen
typisch:
Erzeugung der internen und der Präsentationsobjekte
und die Verkettung dieser Objekte
bei der Programminitialisierung
weiter
Struktur
Strukturdiagramm
weiter
Teilnehmer
  Subjekt
kennt Beobachter
kann Beobachter registrieren und löschen
  Beobachter
kennt beobachtetes Objekt, definiert Kommando(s) zum Aktualisieren
  KonkretesSubjekt
besitzt Zustand und lesende Zugriffsfunktionen
  KonkreterBeobachter
besitzt eine (teilweise) Kopie des Zustands
muss diese Kopie konsistent halten
weiter
Konsequenzen
Subjekte und Beobachter können unabhängig voneinander variiert werden
beide Klassenhierarchien über Subjekte und Beobachter können unabhängig erweitert werden
broadcast-Funktion:
einer benachrichtigt viele Beobachter, diese entscheiden selbständig über die Reaktion
es wird im Protokoll aktualisiere() nicht festgelegt, was sich geändert hat
dies muss der Beobachter erfragen.
Vorsicht bei Beobachtern, die gleichzeitig als controller arbeiten:
Gefahr von Endlosschleifen
textwidget --> scrollbar --> textwidget --> ...
weiter
Implementierung
Parametrisierung der aktualisiere()-Operation erleichtert die Erkennung, was sich geändert hat
macht die Schnittstelle aber nicht mehr so universell einsetzbar
weiter
Beispiele
Java Beispiel einer Uhr mit Beobachter
weiter
Bekannte Verwendungen
in vielen Grafik-Bibliotheken zusammen mit dem Befehlsmuster zur Trennung von Verarbeitung und Ausgabe eingesetzt
in Tcl/Tk: das bind-Kommando
im JDK: Befehlsmuster anstatt Beobachter
weiter
verwandte Muster
speichert für jedes beobachtende Objekt eine Methode zu Benachrichtigung.
Unterschied zu Beobachter: die Verkettung ist nur unidirektional
alle Information über Zustandsänderungen werden über Parameter versendet.
weiter

Letzte Änderung: 13.04.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel