El método Factory es un patrón de diseño creacional que define una interfaz para crear un objeto pero permite que las subclases decidan qué clase crear una instancia. En lugar de llamar a un constructor directamente con new, llamas a un método de fábrica y la subclase determina el tipo concreto.

Idea central: delegar la creación de objetos a subclases. La clase creadora declara el método de fábrica; cada creador concreto lo anula para producir un producto específico.
El problema que resuelve

Imagina que estás creando una aplicación de logística. Inicialmente sólo maneja camiones. Usted codifica el nuevo Truck() en todas partes. Entonces el negocio necesita transporte marítimo. Ahora hay que cambiar todos los lugares que generan transporte. El método Factory le permite aislar la lógica de creación, por lo que agregar un nuevo tipo de transporte solo requiere una nueva subclase.

Haga clic para animar el flujo de creación ▶
Creador
declara crearTransporte()
Método de fábrica
anulado por subclase
Creador concreto
CamiónLogística
Producto
Camión : Transporte
Estructura
Haga clic en un rol para saber qué hace
Ejemplo de código
java
// Product interface
interface Transport {
    void deliver();
}

// Concrete Products
class Truck implements Transport {
    @Override
    public void deliver() {
        System.out.println("Delivering by land in a truck");
    }
}

class Ship implements Transport {
    @Override
    public void deliver() {
        System.out.println("Delivering by sea in a container ship");
    }
}
Paso a paso: qué sucede en tiempo de ejecución
Haga clic en cada paso para ver detalles
Cuándo utilizar el método de fábrica
Haga clic para ampliar cada escenario
Compensación: el método Factory puede conducir a muchas jerarquías de subclases paralelas: un ConcreteCreator para cada ConcreteProduct. Si la jerarquía crece, considere Abstract Factory o Prototype en su lugar.
Método de fábrica en la biblioteca estándar de Java
Haga clic en las líneas resaltadas para ver el patrón en acción.
java
1
// java.util.Collection — iterator() is a factory method
2
List<String> list = new ArrayList<>();
3
Iterator<String> it = list.iterator();
4
5
// java.nio.file.Files — static factory methods
6
Path path = Path.of("/tmp/file.txt");
7
8
// java.util.Calendar
9
Calendar cal = Calendar.getInstance();
Conclusión clave: Factory Method promueve el principio abierto/cerrado: puede agregar nuevos tipos de productos (nuevo transporte) sin cambiar el código de creador existente (Logistics.planDelivery).