13.2.6 | Das Implementierungskonzept |
Das Socket-Konzept ist in Java durch drei unterschiedliche Klassen geprägt:Durch die SocketImplFactory ist also das Verhalten der Sockets festgelegt, die in einer Anwendung benutzt werden. Die Implementierung ist in den entsprechenden SocketImpl-Klassen verborgen. Durch die Kapselung der Implementierung von der einheitlichen Schnittstelle, die in der Klasse Socket bzw. DatagramSocket definiert wird, ist es einfach, durch wenige Änderungen am Programm eine andere Socket-Implementierung für die Kommunikation zu verwenden. So könnte man sich z. B. vorstellen, Sockets zu implementieren, die die zu übertragenden Daten verschlüsseln.
- Socket, DatagramSocket
Mit diesen Klassen kommt der Programmierer am häufigsten in Kontakt. Über ihre Schnittstellen wird die Kommunikation zwischen zwei Programmen abgewickelt.- SocketImpl, DatagramSocketImpl
Diese Klassen enthalten die eigentliche Implementierung eines Sockets. SocketImpl und DatagramSocketImpl sind abstrakte Klassen, die meist mit native-Methoden implementiert werden. Das ist notwendig, um die Umsetzung der Socket-Kommunikation auf eine Plattform vornehmen zu können.- SocketImplFactory
Diese Klasse dient der Erzeugung einer bestimmten Socket-Implementierung. Jeder vom Programmierer verwendete Socket wird von einer SocketImplFactory erzeugt. Auch diese Klasse ist abstrakt. Sie enthält nur die Methode createSocketImpl(), die als Ergebnis ein Exemplar der Klasse SocketImpl zurückliefert.
Bei der Ersetzung müssen folgende Schritte vorgenommen werden:Es existiert eine SocketImplFactory sowohl für Client- als auch für Server-Seite. Deshalb enthalten die Klassen Socket und ServerSocket Methoden, mit denen die SocketImplFactory für eine Applikation gesetzt werden kann. Nachdem eine SocketImplFactory gesetzt ist, werden alle benötigten Sockets von ihr erzeugt. Sowohl für Client-Sockets als auch für Server-Sockets kann die SocketImplFactory allerdings nur einmal gesetzt werden. Beim Versuch, zum zweiten Mal die SocketImplFactory zu setzen, wird eine SocketException ausgelöst. In Applets ist das Setzen einer SocketImplFactory nicht möglich.
- Ableiten einer eigenen Klasse von SocketImpl und Implementierung der Funktionen.
- Ableiten einer Klasse von SocketImplFactory und Implementierung der Methode createSocketImpl(). Die einfachste Implementierung von createSocketImpl() ist das Erzeugen eines Exemplars von SocketImpl und Rückgabe des erzeugen Objekts.
- Setzen der SocketImplFactory im Programm. In jeder Anwendung kann die SocketImplFactory vom Programmierer gesetzt werden.