Java Reference
In-Depth Information
4.5 Das Strukturmuster Dekorierer
4.5.1 Name/Alternative Namen
Dekorierer (engl. decorator).
4.5.2 Problem
Es sollen Objekte einer Klassenhierarchie
dynamisch zur Laufzeit
zusätzliche Funk-
tionalität erhalten.
Das
Dekorierer-Muster
soll es erlauben, zur Laufzeit eine zu-
sätzliche Funktionalität zu einem vorhandenen Objekt in dyna-
mischer Weise hinzuzufügen.
4.5.3 Lösung
Das Dekorierer-Muster ist ein objektbasiertes Entwurfsmuster. Die zu erweiternden
Objekte gehören alle einer Klassenhierarchie an, an deren Spitze eine Basisklasse
steht. Die Basisklasse wird im Folgenden auch als Komponente bezeichnet.
Der Lösungsansatz des Dekorierer-Musters ist es, in einem De-
korierer das zu verzierende, sprich zu erweiternde Objekt zu ag-
gregieren und gleichzeitig einem Kunden, dem Client, dieselbe
Schnittstelle wie die zu verzierende Komponente anzubieten.
Dazu leitet man die Klasse
Dekorierer
von der Klasse
Komponente
ab. Nach dem
liskovschen Substitutionsprinzip kann dann im Programm ein Objekt der Klasse
Deko-
rierer
an die Stelle eines Objekts der Klasse
Komponente
treten, solange der Ver-
trag der Klasse
Komponente
mit dem Client nicht gebrochen wird. Aufrufe, die nicht
verändert werden sollen, werden einfach vom Objekt der Klasse
Dekorierer
an die
aggregierte Komponente weitergeleitet. Methodenaufrufe, die dekoriert werden sollen,
werden überschrieben. Die überschreibende Methode enthält das Anbringen der Ver-
zierung und den Aufruf der ursprünglichen Methode der aggregierten Komponente
nach dem Delegationsprinzip, um die ursprüngliche Funktionalität sicherzustellen. Mit
dem Verzierungsanteil darf die Klasse
Dekorierer
aber den Vertrag der überschrie-
benen Methode nicht brechen.
Das zu dekorierende Objekt merkt dabei gar nicht, dass es deko-
riert wird. An ihm muss keine Veränderung vorgenommen wer-
den.
Search WWH ::
Custom Search