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