Java Reference
In-Depth Information
4.5.3.1 Klassendiagramm
Die Klasse Komponente ist die Basisklasse aller zu dekorierenden Objekte und legt
deren Schnittstelle fest. Im folgenden Klassendiagramm sollen beispielsweise Objekte
der Klassen KonkreteKomponente1 oder KonkreteKomponente2 dekoriert wer-
den. Hier das Klassendiagramm:
1
Client
Komponente
«use»
Konkrete
Komponente1
Konkrete
Komponente2
Dekorierer
. . . .
Bild 4-7 Klassendiagramm des Dekorierer-Musters
Die Klasse Dekorierer ist ebenfalls von der Klasse Komponente abgeleitet und
aggregiert gleichzeitig genau ein Objekt vom Typ Komponente . Bei Einhaltung des lis-
kovschen Substitutionsprinzips kann aber auch ein Objekt jeder beliebigen Subklasse
( KonkreteKomponente1 , KonkreteKomponente2 , …) der Klasse Komponente
aggregiert und dekoriert werden.
Die von der Klasse Komponente geerbten Methoden werden alle vom Dekorierer
überschrieben. Beim Aufruf einer überschreibenden Methode leitet der Dekorierer
diesen Aufruf an das aggregierte Objekt weiter und kann dabei vor oder nach bzw. vor
und nach der Delegation den Code für die Zusatzfunktionalität ausführen. Hält die
Methode das liskovsche Substitutionsprinzip ein, kann der Aufruf der überschriebenen
Methode ganz entfallen.
Da die Klasse Dekorierer auch von der Klasse Komponente abgeleitet ist, macht
es für Clients bei Einhaltung des liskovschen Substitutionsprinzips keinen Unterschied,
ob sie mit einem dekorierten Objekt arbeiten oder mit einer konkreten, undekorierten
Komponente. Das bedeutet, dass die Referenz auf ein Objekt der Klasse Komponen-
te , die ein Client-Programm benutzt, in einem Falle auf eine konkrete Komponente, in
einem anderen Fall auf einen Dekorierer zeigen kann.
Die Tatsache, dass die Klasse Dekorierer sowohl von der Klasse Komponente ab-
geleitet ist als auch gleichzeitig ein Objekt vom Typ Komponente aggregiert, bedarf
einer näheren Untersuchung. Im Folgenden werden zuerst die Methoden und dann die
Daten der Klasse Dekorierer betrachtet.
Methoden des Dekorierers
Die Klasse Dekorierer erbt die Methoden der Klasse Komponente . Diese können
vom Dekorierer überschrieben werden, aber der Dekorierer kann auch neue Methoden
hinzufügen. Neu hinzugekommene - also erweiternde - Methoden können aber von
einem Client, der nur die Schnittstelle der Klasse Komponente kennt und darüber auf
 
Search WWH ::




Custom Search