Muster: Decorator

DekoriererBearbeiten

Der Dekorierer (engl. decorator) wird dazu verwendet um zur Laufzeit Funktionalität zu einem Objekt hinzuzufügen.

ZweckBearbeiten

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.

UMLBearbeiten

Dieser Abschnitt wird dir die Notation in der UML zeigen. Dies wird hilfreich sein, wenn du mit modernen Entwicklungswerkzeugen (vorhandene) Projekte "begutachtest".

EntscheidungshilfenBearbeiten

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:

ImplementationBearbeiten

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 MusterBearbeiten

Der Decorator ist eine Aggregation, die nur eine Referenz hält.

WeblinksBearbeiten

Wikipedia: Dekorierer