Java Academy · Lección

Abstract Factory para familias de productos

Cree familias de objetos relacionados (por ejemplo, componentes de interfaz de usuario por plataforma) con Abstract Factory.

Lección 3 de 414 pasos

Abstract Factory para familias de productos es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 3 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 Abstract Factory

Abstract Factory proporciona una interfaz para crear familias de objetos relacionados sin especificar sus clases concretas. Garantiza que los productos de una fábrica sean compatibles entre sí.

El problema: familias de productos incoherentes

Sin Abstract Factory, podría mezclar un botón de Windows con una casilla de verificación de Mac. El patrón garantiza que todos los productos provengan de la misma fábrica, lo que asegura la coherencia visual o de comportamiento.

Interfaz de Abstract Factory

Defina una interfaz con un método de creación para cada producto de la familia. Cada fábrica concreta implementa todos los métodos correspondientes a una variante.

public interface UIFactory {
    Button   createButton();
    Checkbox createCheckbox();
    TextField createTextField();
}

Fábricas concretas

Cada fábrica concreta crea todos los productos de una plataforma o un tema. El código cliente solo hace referencia a la interfaz, no a las fábricas concretas.

public class WindowsUIFactory implements UIFactory {
    public Button    createButton()    { return new WindowsButton(); }
    public Checkbox  createCheckbox()  { return new WindowsCheckbox(); }
    public TextField createTextField() { return new WindowsTextField(); }
}
public class MacUIFactory implements UIFactory {
    public Button    createButton()    { return new MacButton(); }
    public Checkbox  createCheckbox()  { return new MacCheckbox(); }
    public TextField createTextField() { return new MacTextField(); }
}

Interfaces de productos abstractos

Cada tipo de producto tiene su propia interfaz. Los productos concretos la implementan para cada plataforma. El código cliente trabaja con el producto abstracto, no con el concreto.

public interface Button   { void render(); void onClick(); }
public interface Checkbox  { void render(); boolean isChecked(); }
public interface TextField { void render(); String getValue(); }

El cliente utiliza la fábrica

El cliente recibe una fábrica mediante su constructor. Llama a los métodos de la fábrica para crear widgets y los utiliza mediante interfaces de productos abstractos, completamente desacoplado de las clases concretas.

public class Application {
    private final UIFactory factory;
    public Application(UIFactory factory) { this.factory = factory; }
    public void buildUI() {
        Button btn = factory.createButton();
        Checkbox cb = factory.createCheckbox();
        btn.render();
        cb.render();
    }
}

Elección de la fábrica en tiempo de ejecución

Seleccione la fábrica concreta según el entorno o la configuración e inyéctela. El resto de la aplicación nunca hace referencia a clases específicas de la plataforma.

String os = System.getProperty("os.name").toLowerCase();
UIFactory factory = os.contains("mac") ? new MacUIFactory() : new WindowsUIFactory();
new Application(factory).buildUI();

Añadir un producto nuevo a la familia

Añadir un producto nuevo (por ejemplo, Slider) requiere actualizar la interfaz de la fábrica abstracta y todas las fábricas concretas, lo que constituye una desventaja del patrón.

public interface UIFactory {
    Button   createButton();
    Checkbox createCheckbox();
    Slider   createSlider(); // new product — must update ALL factories
}

Abstract Factory frente a Factory Method

Factory Method crea un producto mediante la herencia. Abstract Factory crea una familia de productos mediante la composición. Abstract Factory suele implementarse utilizando un conjunto de Factory Methods.

Abstract Factory para controladores de bases de datos

Una fábrica abstracta ConnectionFactory puede producir objetos Connection, Statement y ResultSet. Cambie entre MySQL y PostgreSQL modificando la fábrica.

public interface DBFactory {
    Connection  createConnection();
    Statement   createStatement();
}
public class MySQLFactory implements DBFactory { ... }
public class PgFactory   implements DBFactory { ... }

Abstract Factory con perfiles de Spring

En Spring Boot, defina un bean UIFactory de forma diferente para cada perfil: la aplicación siempre inyecta UIFactory; Spring resuelve la fábrica concreta correcta para el perfil activo.

@Configuration
@Profile("mac")
public class MacConfig {
    @Bean UIFactory uiFactory() { return new MacUIFactory(); }
}

Garantizar la coherencia

La ventaja principal es que una fábrica solo produce productos compatibles. Al utilizar Abstract Factory correctamente, nunca obtendrá por accidente una casilla de verificación de Mac emparejada con un botón de Windows.

Comprobación rápida

¿Qué garantiza Abstract Factory que Factory Method no garantiza?

Resumen

Abstract Factory crea familias de objetos relacionados mediante una interfaz común. Permite cambiar familias completas de productos modificando la fábrica. Es ideal cuando los productos deben ser coherentes, aunque añade complejidad al incorporar nuevos tipos de producto.

Gratis para empezar

Aprende Java con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
104
Lecciones
374

Preguntas frecuentes

¿La lección «Abstract Factory para familias de productos» es gratis?

Sí — el texto completo de «Abstract Factory para familias de productos» 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 «Abstract Factory para familias de productos»?

Cree familias de objetos relacionados (por ejemplo, componentes de interfaz de usuario por plataforma) con Abstract Factory. 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 3 de 4.

¿Cuánto tiempo toma la lección «Abstract Factory para familias de productos»?

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

  1. Singleton: implementaciones seguras para hilos
  2. Patrón Factory Method
  3. Abstract Factory para familias de productos
  4. Patrón Builder con API fluida
← Volver a Java Academy