Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Patrones de Diseño Creacionales

Factory Method

Crear objetos sin especificar clases concretas

Universidad Nacional de Rio Negro - Sede Andina

Definición

El patrón Factory Method (Método de Fábrica) es un patrón de diseño creacional que define una interfaz para crear un objeto, pero deja que las subclases decidan qué clase instanciar. El Factory Method permite que una clase delegue la instanciación a sus subclases.

Origen e Historia

Formalizado por el GoF en 1994, este patrón es una de las piedras angulares de la programación orientada a objetos moderna. Surgió como una solución para desacoplar el código que utiliza un objeto del código que lo crea, permitiendo que un sistema sea extensible sin necesidad de modificar el código existente.

Motivacion

La motivación surge cuando una clase no puede anticipar la clase de objetos que debe crear.

// Sin Factory Method: Acoplamiento rígido
public class Aplicacion {
    public void abrir() {
        Documento doc = new DocumentoPDF(); // ❌ Acoplado a PDF
        doc.mostrar();
    }
}

Al usar un Factory Method, la clase Aplicacion solo sabe que necesita un Documento, pero deja que una subclase específica (como AplicacionPDF) decida qué tipo de documento crear.

Contexto

Se aplica cuando:

Cuando aplica

Cuando no aplica

Consecuencias de su uso

Positivas

Negativas

Alternativas

Estructura

Diagramas

Diagrama de Clases

Diagrama de Secuencia

Ejemplos

/**
 * Clase base que define el factory method.
 */
public abstract class Aplicacion {
    protected abstract Documento crearDocumento();
    
    public void abrirDocumento() {
        Documento doc = crearDocumento(); // Factory Method
        doc.abrir();
    }
}

/**
 * Interfaz para productos.
 */
public interface Documento {
    void abrir();
}

/**
 * Implementaciones concretas.
 */
public class DocumentoPDF implements Documento {
    @Override
    public void abrir() { System.out.println("Abriendo PDF..."); }
}

/**
 * Subclase que implementa el factory method.
 */
public class AplicacionPDF extends Aplicacion {
    @Override
    protected Documento crearDocumento() {
        return new DocumentoPDF();
    }
}

Ejercicios

Resumen

El Factory Method es la herramienta definitiva para el desacoplamiento creacional. Su principal valor radica en permitir que un sistema evolucione permitiendo que nuevas subclases decidan cómo instanciar objetos existentes, manteniendo el código base limpio y enfocado en la lógica de alto nivel.

Próximo paso

Para seguir, conviene pasar a el material siguiente, donde el recorrido continúa sobre esta base.