Saltar al contenido
Portada » Patrones de diseño: Factoría

Patrones de diseño: Factoría

El patrón de diseño Factoría (Factory) está relacionado con la creación de objetos. Usando el patrón Factory se crean los objetos ocultando la lógica de creación al cliente, por lo que utilizará una interfaz común para crear un nuevos tipos de objeto.

La idea es utilizar un método estático que cree y devuelva las nuevas instancias de objetos, ocultando los detalles al usuario.

El patrón Factoría es uno de los mecanismos principales para crear objetos, permitiendo a los clientes instanciar librerías sin necesidad de acoplarse a la jerarquía de clases de la librería.

Clientes y librerías

Una librería es una entidad proporcionada por un tercero que expone una interfaz o API pública. Los clientes hacen llamadas a esa API pública para llevar a cabo sus tareas.

¿Por qué es necesario el patrón Factoría?

Cuando un cliente instancia directamente una clase en base a algún input que reciba establece un acoplamiento muy alto con dicha implementación. En caso de que una nueva clase implemente la interfaz del API, el cliente tendría que modificar su implementación para incluir este caso de uso.

En este punto es donde viene a ayudarnos a abstraernos el patrón Factoría, manteniendo al cliente independizado de las clases que implementan una determinada interfaz del API a consumir.

Implementación del patrón Factoría

Paso 1: Creación interfaz

Forma.java

public interface Forma {
   void dibujar();
}

Paso 2: Clases que implementan la interfaz

Rectangulo.java

public class Rectangulo implements Forma {

   @Override
   public void dibujar() {
      System.out.println("Pintamos un rectangulo");
   }
}

Circulo.java

public class Circulo implements Forma {

   @Override
   public void dibujar() {
      System.out.println("Pintamos un circulo");
   }
}

Paso 3: Creación de la Factoría

FactoriaFormas.java

public class FactoriaFormas {

   public Forma obtenerForma(String tipo){
      if(tipo == null){
         return null;
      }		
      if(tipo.equalsIgnoreCase("CIRCULO")){
         return new Circulo();
         
      } else if(tipo.equalsIgnoreCase("RECTANGULO")){
         return new Rectangulo();
         
      } 
      
      return null;
   }
}

Paso 4: Creación del cliente que usa la factoría

Cliente.java

public class Cliente{

   public static void main(String[] args) {
      FactoriaFormas factoriaFormas= new FactoriaFormas();


      Forma forma1 = factoriaFormas.obtenerForma("CIRCULO");
      forma1.dibujar();

      Forma forma2 = factoriaFormas.obtenerForma("RECTANGULO");
      forma2.dibujar();
   }
}

Hazte con los mejores libros de patrones de diseño (design patterns)

Design Patterns: Elements of Reusable Object-Oriented Software – Erich Gamma

Patrones de diseño en Java. Los 23 modelos de diseño

Fácil Aprendizaje Patrones de Diseño Java


Más patrones de diseño

PatrónDescripción
Factoría (Factory)Abstrae clientes de la instanciación de objetos de una librería.
ObserverDesacopla el sujeto de los observadores para notificar su estado.
SingletonComo tener una única instancia de una clase en memoria.
DecoratorAñadir responsabilidades a un objeto de forma dinámica.

Más recursos Java

AsuntoDescripción
Tutorial básico y sintaxisTutorial básico Java y sintaxis. Aprende los fundamentos del lenguaje.
Hilos (Threads)Aprende a manejar hilos y las cuestiones básicas de la concurrencia
Funciones LambdaAquí te enseñamos las nociones más importantes para arrancas con funciones lambda
PalíndromosPrograma de ejemplo para el uso de palíndromos en Java.
Máquina Virtual de JavaTe explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM)
JDK, JRE y JVMDiferencias entre el JDK, JRE y JVM.
Mejores libros Java en EspañolHazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas
TensorFlowManejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución
Tutorial Log4jTutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java
Java SecurityEntiende y aplica las posibilidades que da Java para mantener la seguridad
Tutorial JConsoleAprende los conceptos básicos de monitorización de procesos Java con JConsole
JavaFXTutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web.
Estructuras de datos en JavaExplicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol.
JavaapiConjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar
Algoritmo HuffmanMétodo eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes