software poo patrones patron objetos migranitodejava method fabrica diseño java jdbc effective-java service-provider

java - poo - Comprender el concepto detrás del marco del proveedor de servicios como JDBC utilizando el método de fábrica



patron factory java (2)

Desde Effective Java ( Elemento 1 : considerar métodos de fábrica estáticos en lugar de constructores ):

La clase del objeto devuelto por un método de fábrica estática ni siquiera debe existir en el momento en que se escribe la clase que contiene el método. Estos métodos de fábrica estáticos flexibles forman la base de los marcos de servicios de proveedores, como la API de conectividad de base de datos de Java (JDBC). Un marco de proveedor de servicios es un sistema en el que múltiples proveedores de servicios implementan un servicio, y el sistema hace que las implementaciones estén disponibles para sus clientes, separándolas de las implementaciones.

¿No entiendo específicamente por qué el libro dice que la clase del objeto devuelto por un método de fábrica estático ni siquiera tiene que existir en el momento en que se escribe la clase que contiene el método? ¿Puede alguien explicar utilizando JDBC como ejemplo?


El sistema pone las implementaciones a disposición de sus clientes, separándolas de las implementaciones.

Solo para ponerlo de una manera más simple, no agregue ninguna dependencia de estos proveedores de JDBC en el momento de la compilación. Los clientes pueden agregar sus propios en tiempo de ejecución


Considera algo como lo siguiente:

public interface MyService { void doSomething(); } public class MyServiceFactory { public static MyService getService() { try { (MyService) Class.forName(System.getProperty("MyServiceImplemetation")).newInstance(); } catch (Throwable t) { throw new Error(t); } } }

Con este código, su biblioteca no necesita saber acerca de las implementaciones del servicio. Los usuarios de su biblioteca tendrían que establecer una propiedad del sistema que contenga el nombre de la implementación que desean usar.

Esto es lo que significa la oración que no comprende: el método de fábrica devolverá una instancia de alguna clase (cuyo nombre se almacena en la propiedad del sistema "MyServiceImplementation"), pero no tiene la menor idea de qué clase es. Todo lo que sabe es que implementa MyService y que debe tener un constructor público sin argumentos (de lo contrario, la fábrica anterior generará un Error ).