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