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

Dekorierer

weiter

weiter

Dekorierer

Klassifizierung
objektbasiertes Strukturmuster
weiter
Zweck
Objekte dynamisch um Funktionalität erweitern
flexible Alternative zu Unterklassenbildung
weiter
Alias
decorator, wrapper
gebundener Umwickler
weiter
Motivation
Beispiel aus GUI-Umfeld

weiter
statischer Ansatz
Klassenhierarchien erweitern

weiter
merke
Kombinierbarkeit bei statischem Ansatz nicht möglich
weiter
merke
Explosion der # der Klassen
weiter
merke
mangelnde Flexibilität:
nicht beliebig kombinierbar
z.B. keine Schachtelung von zwei frames (mit unterschiedlichen Farben)
weiter
Anwendbarkeit
zusätzliche Funktionalität dynamisch hinzufügen
zusätzliche Funktionalität transparent hinzufügen
Funktionalität kann wieder entfernt werden
anwendbar, wenn Unterklassenbildung nicht praktikabel ist
weiter
Struktur
Strukturdiagramm
weiter
Teilnehmer
  Komponente
abstrakt
einheitliche Schnittstelle
  KonkreteKomponente
konkret
Klasse für Objekte, die erweitert werden können
  Dekorierer
abstrakt
verwaltet Referenz auf Komponenten-Objekt
verhält sich wie das Objekt selbst
default-Funktionalität
--> Proxy
  KonkreterDekorierer[A-B]
fügen neue Funktionalität und/oder neue Datenkomponenten hinzu
weiter
Konsequenzen
flexibler als Vererbung
mehrfache Anwendung der Dekoration möglich
viele kleine Objekte
Referenzen von Dekorierer und eigentlichem Objekt verschieden: Vorsicht bei Referenz-Vergleichen
weiter
Implementierung
abstrakte Dekorierer-Klasse kann entfallen, wenn nur eine Dekoration erwünscht ist
dann: gleiche Struktur wie Proxy
keine Datenfelder in die abstrakte Komponenten-Klasse
diese sind im Dekorierer überflüssig
Komponenten-Klasse möglichst leichtgewichtig
wenig Datenfelder
möglicherweise Zwischenschritt einziehen
weiter
Beispiel

Dekoration von streams
z.B. Zusatzinformation über # Zeichen, # Zeilen, ...

weiter
Bekannte Verwendungen
filter streams in JDK1.1
weiter
verwandte Muster
arbeitet mit unterschiedlichen Schnittstellen
weiter
aggregiert Objekte
weiter
keine abstrakte Dekorierer-Klasse --> Proxy
weiter

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