Java Reference
In-Depth Information
Counter
CounterImpl
StacProxy
Bild 4.3 UML-Klassendiagramm
zur Verkettung von Proxies
(Decorator)
StacProxy1
StacProxy2
StacProxy3
Das Entwurfsmuster Decorator kommt zum Beispiel auch in der Eingabe-Ausgabe-Biblio-
thek von Java vor. Hier gibt es zum Beispiel eine abstrakte OutputStream-Klasse mit mehre-
ren Write-Methoden (entspricht in Bild 4.3 der Schnittstelle Counter). Daraus ist eine Klasse
wie FileOutputStream zum Schreiben in Dateien abgeleitet (entspricht in Bild 4.3 der Klasse
CounterImpl). Das Pendant zur StaticProxy-Klasse ist die Klasse FilterOutputStream, die ein
Attribut des Typs OutputStream besitzt. Aus FilterOutputStream ist dann zum Beispiel
CipherOutputStream zur Verschlüsselung und Defl aterOutputStream zur Komprimierung
abgeleitet. Man kann dann mit den Methoden der abstrakten Klasse OutputStream kompri-
miert und verschlüsselt in eine Datei schreiben, indem man vor ein FileOutputStream-
Objekt je ein Proxy-Objekt der Klassen CipherOutputStream und Defl aterOutputStream
schaltet.
In diesem Abschnitt wurden die statischen Proxy-Klassen manuell erstellt. Dies muss nicht
unbedingt so sein. Auch eine automatische Erzeugung einer statischen Proxy-Klasse ist
durchaus möglich. So wurde zum Beispiel in früheren RMI-Versionen (vor Java-Version 5)
die RMI-Stub-Klasse vom sogenannten RMI-Compiler rmic erzeugt. Der RMI-Compiler
bekam eine oder mehrere RMI-Schnittstellen als Eingabe und erzeugte dann eine Klasse,
die genau diese Schnittstellen implementierte. In den automatisch generierten Methoden
werden die für den Methodenaufruf nötigen Daten wie Objektkennung, Methodenname und
Parameter über eine Netzverbindung an einen RMI-Server gesendet, auf eine Antwort von
diesem RMI-Server gewartet und der über die Netzverbindung empfangene Rückgabewert
von der Methode zurückgegeben.
Egal ob manuell oder automatisch generiert: Das Thema dieses Abschnitts waren statische
Proxy-Klassen, die beim Starten eines Programms schon existieren. Im Gegensatz dazu
befassen wir uns im restlichen Teil dieses Kapitels mit dynamischen Proxy-Klassen, die erst
zur Laufzeit durch das laufende Programm erzeugt werden. Hierzu gibt es zwei Wege: mit
Hilfe von Refl ection oder mit Hilfe der CGLIB.
 
Search WWH ::




Custom Search