Patrón Factory Method
Defina un método de fábrica en una clase base y permita que las subclases decidan qué producto crear.
Patrón Factory Method es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Propósito de Factory Method
Factory Method define una interfaz para crear un objeto, pero permite que las subclases decidan qué clase instanciar. Desacopla la lógica de creación del código cliente.
El problema sin Factory Method
Sin una fábrica, el código cliente está plagado de llamadas a new ConcreteClass(). Añadir una nueva variante implica cambiar cada punto de llamada, lo que infringe el principio abierto/cerrado.
// Client knows too much:
Shape shape;
if (type.equals("circle")) shape = new Circle(r);
else if (type.equals("rect")) shape = new Rectangle(w, h);
// Every new shape requires editing this code.La clase abstracta creadora
Defina una clase creadora abstracta con un método de fábrica createProduct(). Las subclases lo sobrescriben para devolver tipos de producto específicos.
public abstract class Dialog {
public void render() {
Button btn = createButton(); // factory method
btn.onClick();
}
protected abstract Button createButton();
}Creadores concretos
Cada subclase sobrescribe el método de fábrica para devolver el producto adecuado sin cambiar el algoritmo que la clase base ejecuta.
public class WindowsDialog extends Dialog {
@Override
protected Button createButton() { return new WindowsButton(); }
}
public class WebDialog extends Dialog {
@Override
protected Button createButton() { return new HtmlButton(); }
}La interfaz de producto
Todos los productos concretos implementan una interfaz común para que el creador pueda trabajar con ellos de forma genérica.
public interface Button {
void onClick();
void render();
}
public class WindowsButton implements Button {
public void onClick() { System.out.println("Windows click"); }
public void render() { System.out.println("Render Windows button"); }
}Métodos de fábrica estáticos frente al patrón Factory Method
Un método de fábrica estático (por ejemplo, LocalDate.of()) es una convención de nomenclatura, no el patrón de GoF. El patrón de GoF utiliza herencia; las fábricas estáticas utilizan métodos estáticos en una sola clase.
// Static factory (NOT the GoF pattern)
LocalDate d = LocalDate.of(2024, 6, 15);
// GoF Factory Method uses a class hierarchyFactory Method parametrizado
Pase un parámetro al método de fábrica para elegir entre varios productos sin necesitar una subclase por producto.
public class ShapeFactory {
public static Shape create(String type, double... dims) {
return switch (type) {
case "circle" -> new Circle(dims[0]);
case "rectangle" -> new Rectangle(dims[0], dims[1]);
default -> throw new IllegalArgumentException("Unknown: " + type);
};
}
}Factory Method con genéricos
Utilice genéricos para que el método de fábrica sea seguro en cuanto a tipos y reutilizable con distintas familias de productos.
public abstract class Repository<T, ID> {
public abstract T findById(ID id);
protected abstract T createEmpty(); // factory method
}Registro de fábricas con un Map
Una fábrica basada en un registro almacena un mapa de cadenas de tipo a lambdas Supplier, evita las cadenas de if-else y permite un registro dinámico.
Map<String, Supplier<Notification>> registry = new HashMap<>();
registry.put("email", EmailNotification::new);
registry.put("sms", SmsNotification::new);
Notification n = registry.getOrDefault(type, DefaultNotification::new).get();Factory Method frente a Abstract Factory
Factory Method crea un tipo de producto mediante herencia. Abstract Factory crea familias de productos relacionados mediante composición. Utilice Factory Method cuando varíe un solo producto; Abstract Factory, cuando una familia completa varíe en conjunto.
Ejemplo del mundo real: fábrica de registradores
LoggerFactory.getLogger(Class) de SLF4J es una fábrica estática que devuelve la implementación correcta del registrador (Logback, Log4j o JUL) sin que quien la llama tenga que saber cuál es.
Logger log = LoggerFactory.getLogger(MyService.class);
log.info("Service started");Comprobación rápida
¿Cuál es la característica clave del patrón Factory Method?
Resumen
Factory Method desacopla la creación de objetos del cliente al colocar la decisión de instanciación en métodos sobrescribibles de las subclases. Utilícelo cuando una clase no pueda prever qué objetos necesita crear.
Preguntas frecuentes
¿La lección «Patrón Factory Method» es gratis?
Sí — el texto completo de «Patrón Factory Method» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Patrón Factory Method»?
Defina un método de fábrica en una clase base y permita que las subclases decidan qué producto crear. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Patrón Factory Method»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Singleton: implementaciones seguras para hilos
- Patrón Factory Method
- Abstract Factory para familias de productos
- Patrón Builder con API fluida