Muster: Decorator
Dekorierer
BearbeitenDer Dekorierer (engl. decorator) wird dazu verwendet um zur Laufzeit Funktionalität zu einem Objekt hinzuzufügen.
Zweck
BearbeitenWenn 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
BearbeitenDieser Abschnitt wird dir die Notation in der UML zeigen. Dies wird hilfreich sein, wenn du mit modernen Entwicklungswerkzeugen (vorhandene) Projekte "begutachtest".
Entscheidungshilfen
BearbeitenPRO:
- 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
BearbeitenUm 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
BearbeitenDer Decorator ist eine Aggregation, die nur eine Referenz hält.
Weblinks
BearbeitenWikipedia: Dekorierer