Patrón de Diseño Factory

UMLEsta entrada formara parte de un conjunto de entradas dedica específicamente a explicar los diferentes patrones de diseño que existe.

El patrón de diseño Factory es uno de los mas utilizados ya que nos permite crear en tiempo de ejecución una Instancia o un resultado a partir de ciertos parámetros e incluso sin parámetros.

Patrón de diseño Factory Method
Patrón de diseño Factory Method

En este caso desarrollaremos un Factory que nos regrese una instancia a adecuada para conectarnos a distintas base de datos. El ejemplo se centra en que a partir del tipo de base de datos que queremos utilizar podremos conectarnos a ella sin necesidad de modificar nada de código.

Primero que nada definimos una interface a la cual todos los adaptadores deben implementar:

IDBAdapter

Fig.1: Interfaz común para todos los adaptadores de base de datos.

Seguido, implementamos una clase adaptador para cada base de datos a la cual nos queremos conectar.

MySQLDBAdapterFig.2: Adaptador para la base de datos MySQL que implementa IDBAdapter.

OracleDBAdapterFig.3: Adaptador para la base de datos Oracle que implementa IDBAdapter.

SQLServerDBAdapterFig.4:Adaptador para la base de datos SQLServer que implementa IDBAdapter.

Hasta este momento tenemos los adaptadores para conectarnos a la base de datos que queramos pero todo por separado por lo cual implementamos la clase Factory la cual tendrá la lógica para determinar que adaptador debemos utilizar

DBFactoryFig.5: Clase la cual es utilizada como factory y regresa una instancia adecuada según el DBType el cual es un Enum

DBTypeFig.6: Enumeración con los distintos tipos de base de datos soportada

Finalmente podemos escribir un programa que requiera conectarse a la base de datos Oracle para lo cual le pase el parámetro DBType.Oracle y regresa una instancia de IDBAdapter la cual al ser una interfaz no le importa realmente que base de datos y el programa podría continuar sin ningún problema si queremos cambiar la base de datos por ejemplo a MySQL o SQLServer.

FacotryMain

Probablemente se te complique un poco pero te sugiero que escribas tu código por tu cuente y vallas probando hasta que te quede todo claro.

 

Este es un uso básico y Factory puede servir para cosas mucho mas complejas ¿En tu opinión, Para que usarías un Factory?

 

Ya está a la venta mi nuevo libro “Introducción a los patrones de diseño“, en donde expongo los 25 patrones de diseño más utilizados y explicados desde un enfoque del mundo real, con ejemplos que pueden ser aplicados en tus proyectos. Sin duda es unos de los libros más completos de patrones de diseño en español.

Artículos relacionados

Ordenar Listas en Java Si eres programador seguramente te has encontrado con el problema de Ordenar Listas, pero ¿Estamos utilizando la solución correcta o estamos reinventa...
Java – Como eliminar rápidamente elementos r... Hace tiempo un amigo me preguntaba  como podía eliminar los elementos repetidos de una colección sin hacer mucho esfuerzo. Bien la solución que consid...
Java 8 – Default Method Una de las novedades que trae Java 8 a nivel del lenguaje, son los Default Method o Métodos default, los cuales permiten agregar métodos implementados...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

4 comentarios en “Patrón de Diseño Factory

  1. Saluton.
    Muy buen aporte, de gran utilidad para aprender la implementación de un patron Factory. En un principio yo tambien comence a utiliar los patrones Factory en conecciones a BD, pero en la actualidad he implementado entity framework, ya no he visto que se utilize la implementación de Factory en conecciones, muchos de mis colegas comentan que requiere tiempo desarrollar algo así, pero si lo he implementado en funcionalidad para usuarios,como control de roles en un sistema… es una buena plicación bueno creo yo.
    Gran aporte compañero Felicidades.

    1. Gracias amigo.
      Este solo es un ejemplo y no es exclusivo para conexiones a base de datos, sin embargo se me hace un ejemplo muy practico para que todos podamos entender de que se trata.
      Con respecto al tiempo de desarrollo, yo creo que el tiempo de desarrollo es algo absurdo cuando los beneficios son mucho mas grandes y es que los patrones de diseño están diseñados para que nuestra aplicación se mucho mas fácil de mantener.

      Saludos

  2. Hola.

    La definición UML del patrón de diseño y y el código no resultan consecuentes, pues una fábrica concreta debe tener una fábrica abstracta que implemente el método definido en la abstracta.

    1. Hola Walter, lo que dices tiene sentido, pues esperas que el código refleja exactamente el diagrama, sin embargo, el factory abstracto es opcional, ya que no es necesario para implementar el patrón. En el diagrama UML se muestra por que es un componente que puede estar, aun que no es una regla.

      El motivo por el cual tenemos un Factory Abstracto, es para poder tener funcionalidad predefinida y reutilizable en caso de que exista más de un Factory.

      Espero que esta respuesta sirva de algo.
      Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *