Dekorierer [ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]


Übersicht


Zweck:
Erweitere ein Objekt dynamisch um Zuständigkeiten. Dekorierer bieten ein flexible Alternative zur Unterklassenbildung, um die Funktionalität einer Klasse zu erweitern.

Motivation:
Gelegentlich wollen wir die Funktionalität einzelner Objekte erweitern, ohne ihre Klassen zu ändern. Eine Klassenbibliothek sollte es Dir beispielsweise ermöglichen, zusätzliche Eigenschaften wie Umrahmungen oder zusätzliche Funktionen wie Scrollen zu beliebigen Komponenten einer Benutzungsschnittstelle hinzufügen zu können.
Vererbung ist eine Möglichkeit, die Funktionalität zu erweitern. Die Dekoration ist allerdings statisch. Ein Klient kann nicht steuern wann und wie die Komponente zu dekorieren ist.
Ein flexiblerer Ansatz besteht darin, die Komponente in einem anderen Objekt einzuschließen, das z.B den Rahmen hinzufügt. Das einschließende Objekt heißt Dekorierer.
Die Schnittstelle des Dekorierers entspricht der Schnittstelle der dekorierten Komponente, so daß seine Anwesenheit für Klienten transparent ist. Der Dekorierer leitet Operationsaufrufe an die Komponente weiter und führt möglicherweise vor oder nach dem Weiterleiten zusätzliche Operationen aus, wie z.B. das Zeichnen eines Rahmens. Diese Transparenz ermöglicht es Dir, Dekorierer rekursiv zu schachteln. Somit kann beliebige und mengenmäßig unbeschränkte Funktionalität hinzugefügt werden.

 Abb. 1: Das Dekorierer Design Pattern



[ Übersicht ] [ Beispiel ] [ Quellen ] [ Home Entwurfsmuster ]
Stand: 31.03.2005, Autor: Henning Schwarz