Muster: Decorator
Dekorierer
[Bearbeiten]Der Dekorierer (engl. decorator) wird dazu verwendet um zur Laufzeit Funktionalität zu einem Objekt hinzuzufügen.
Zweck
[Bearbeiten]Wenn man ein Objekt zur Laufzeit dynamisch um eine bestimmte Funktionalität erweitern will, d.h. man will, dass die Funktion, welche bei einem Methodenaufruf ausgeführt wird, um weitere Funktionalität ergänzt wird. Dies ist im GUI Bereich häufig der Fall. Wenn zum Beispiel die Funktion zum Zeichnen eines Zeichens um das Zeichnen eines Rahmens ergänzt werden soll, dann kann ein Dekorator verwendet werden.
UML
[Bearbeiten]Dieser Abschnitt wird dir die Notation in der UML zeigen. Dies wird hilfreich sein, wenn du mit modernen Entwicklungswerkzeugen (vorhandene) Projekte "begutachtest".
Entscheidungshilfen
[Bearbeiten]PRO:
- Die Aspektkonstruktion mit Hilfe des Dekorierermusters vereinfacht die Subsystem-Bildung. Werkzeuge und die Aspektdekorierer können in ein Subsystem, während die Materialeine in ein anderes untergebracht werden.
KONTRA:
Implementation
[Bearbeiten]Um den Dekorator zu verwenden braucht man:
- Ein Interface von welchem sowohl die Substance als auch der Dekorator ableiten.
- Einen Decorator welcher die Referenz zu exakt einem dieser Interfaces hält.
- Implementierungen der Interfacemethoden im Decorator, welche die Funktionalität halten und anschließend an die Substance verweisen.
- Eine Substance Klasse welche die basis Funktionalität beinhaltet.
Verwandte Muster
[Bearbeiten]Der Decorator ist eine Aggregation, die nur eine Referenz hält.
Weblinks
[Bearbeiten]Wikipedia: Dekorierer