Java Reference
In-Depth Information
den Dekorierer zugreift, nicht genutzt werden. Sie werden einfach weggecasted. Somit
verbleiben bei den Methoden für den Dekorierer zwei Möglichkeiten: er kann geerbte
Methoden unverändert übernehmen oder geerbte Methoden überschreiben.
Soll der Dekorierer eine bestimmte Methode der zu dekorieren-
den Klasse um eine zusätzliche Funktionalität erweitern, so über-
schreibt er diese Methode unter Einhaltung des liskovschen Sub-
stitutionsprinzips. Um die bestehende Funktionalität einer konkre-
ten Komponente zu nutzen, ruft der Dekorierer in der überschrei-
benden Methode die überschriebene Methode des aggregierten
Objekts auf.
Ein Dekorierer muss das liskovsche Substitutionsprinzip einhal-
ten.
Für Methoden der Klasse Komponente , die nicht vom Dekorierer erweitert werden,
darf nicht einfach die Methode der Basisklasse Komponente aufgerufen werden. Da
bei Einhalten des liskovschen Substitutionsprinzips ein Objekt einer von der Klasse
Komponente abgeleiteten Klasse aggregiert werden kann und die aggregierte konkre-
te Komponente selbst bereits Methoden der Klasse Komponente überschrieben ha-
ben könnte, muss der Dekorierer die entsprechende von der Basisklasse Kompo-
nente geerbte Methode auf jeden Fall überschreiben. Die vom Dekorierer geerbte
Methode der Klasse Komponente würde nicht die gewünschte Funktionalität liefern.
Der Dekorierer muss also eine geerbte Methode überschreiben, auch wenn er sie nicht
erweitern will. Er kann dabei einfach einen Methodenaufruf an das aggregierte Objekt
weiterleiten. Es darf generell in der Klasse Dekorierer keine unveränderten geerb-
ten Methoden geben.
Vorsicht!
Ein Dekorierer muss alle geerbten Methoden überschreiben.
Vorsicht!
In der Praxis wird daher häufig ein abstrakter Dekorierer eingeführt, der die Aggrega-
tion realisiert, alle geerbten Methoden überschreibt und die Aufrufe an das aggregierte
Objekt delegiert. Von diesem abstrakten Dekorierer können dann konkrete Dekorierer
ableiten. Der Entwickler eines konkreten Dekorierers muss nur noch die für ihn interes-
santen Methoden betrachten und überschreiben und braucht sich nicht um alle von der
Klasse Komponente geerbten Methoden zu kümmern, da sie bereits vom abstrakten
Dekorierer überschrieben werden. Diese Vorgehensweise hat insbesondere dann ei-
nen Vorteil, wenn mehrere konkrete Dekorierer zu entwickeln sind (siehe Kapitel
4.5.3.4).
In den folgenden Abschnitten wird von den zuvor beschriebenen Fällen nur noch der
eigentlich interessante Fall herausgegriffen, nämlich dass der Dekorierer Methoden
der Klasse Komponente überschreibt, um eine zusätzliche Funktionalität zu schaffen.
Search WWH ::




Custom Search