
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ón | Descripción |
| Factoría (Factory) | Abstrae clientes de la instanciación de objetos de una librería. |
| Observer | Desacopla el sujeto de los observadores para notificar su estado. |
| Singleton | Como tener una única instancia de una clase en memoria. |
| Decorator | Añadir responsabilidades a un objeto de forma dinámica. |
Más recursos Java
| Asunto | Descripción |
| Tutorial básico y sintaxis | Tutorial 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 Lambda | Aquí te enseñamos las nociones más importantes para arrancas con funciones lambda |
| Palíndromos | Programa de ejemplo para el uso de palíndromos en Java. |
| Máquina Virtual de Java | Te explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM) |
| JDK, JRE y JVM | Diferencias entre el JDK, JRE y JVM. |
| Mejores libros Java en Español | Hazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas |
| TensorFlow | Manejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución |
| Tutorial Log4j | Tutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java |
| Java Security | Entiende y aplica las posibilidades que da Java para mantener la seguridad |
| Tutorial JConsole | Aprende los conceptos básicos de monitorización de procesos Java con JConsole |
| JavaFX | Tutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web. |
| Estructuras de datos en Java | Explicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol. |
| Javaapi | Conjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar |
| Algoritmo Huffman | Método eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes |