Diferencia entre Socket y SocketFactory

juagar
07 de Marzo del 2006
Cual es la diferencia entre las clases Socket y SocketFactory?
La primera está dentro de Java.net y la segunda en Javax.net.
Está lo mismo para ServerSocket y ServerSocketFactory, pero me imagino que la diferencia será analoga, no?
Gracias

chuidiang
07 de Marzo del 2006
Hola:

Un Socket es un Socket y hace lo que se supone que hace.

Un SocketFactory es una clase que te permite obtener Sockets. La gracia es que el Socket que te devuelve no tiene porque ser necesariamente una clase Socket. Puede ser cualquier clase hija de Socket. Por ejemplo, la clase SSLSocketFactory hereda de SocketFactory y tiene el método createSocket() igual. Si llamas a este método te devuelve un Socket que en realidad es un SSLSocket que es un socket que transmite la información con el protocolo de seguridad SSL.

Si utilizas todo esto adecuadamente, puedes hacer un código que no sepa en realidad que tipo de Socket esta usando (normal o SSL), ya que lo obtiene a través de una factoria que alguien le pasa y no hace directamente los new de Socket ni de SSLSocket. Por ejemplo

public void miMetodo (SocketFactory factoria)
{
Socket s = factoria.createSocket(...);
....
}

Si lo llamas asi

miMetodo (SocketFactory.getDefault());

usas sockets normales y si lo llamas asi

miMetodo (SSLSocketFactory.getDefault());

estás usando sockets SSL, pero el código que hay dentro de miMetodo() no sabe nada del tipo de socket que está usando.

Si buscas en google "patron factoria" podrás encontrar información que te aclare este concepto de forma más genérica y detallada.

Se bueno.