Java Reference
In-Depth Information
zwei Unterklassen und implementiert dort die Funktionalität, wie in folgendem Bild zu
sehen ist:
OutputStream
{abstract}
PipedOutputStream
FileOutputStream
BufferedPipe
BufferedFile
Bild 4-14 Erweiterung von Funktionalität durch Ableiten
Diese Lösung ist schon deshalb unbefriedigend, weil genau der gleiche Code in unter-
schiedlichen Klassen mehrmals auftaucht. Wie so oft, liegt die bessere Lösung nicht
direkt auf der Hand. Aber es ist klar, dass die Fähigkeit der Pufferung ausgelagert wer-
den muss, so dass sie für alle Klassen, die diese Funktionalität zusätzlich nutzen wol-
len, nur ein einziges Mal implementiert wird. Das folgende Bild zeigt die bessere Lö-
sung:
OutputStream
{abstract}
PipedOutputStream
FileOutputStream
BufferedOutputStream
Bild 4-15 Beispiel für den Dekorierer
Die Klasse BufferedOutputStream wird als Dekorierer angelegt. Der Dekorierer
implementiert genau dieselbe Schnittstelle wie die anderen OutputStream -Klassen,
allerdings leitet er alle Aufrufe direkt an das aggregierte Objekt vom Typ Output-
Stream weiter, nachdem er die notwendigen Aktivitäten zur Pufferung durchgeführt
hat. Zu beachten ist, dass für ein überschreibendes Objekt stets die überschreibende
Methode aufgerufen wird. Eine einfache Implementierung eines Dekorierers vom Typ
BufferedOutputStream sieht folgendermaßen aus:
import java.io.*;
public class BufferedOutputStream extends OutputStream
{
 
Search WWH ::




Custom Search