Sobes.tech
Junior

Proporcione un ejemplo de uso de una fábrica abstracta

sobes.tech AI

Respuesta de la IA

La fábrica abstracta es un patrón de diseño creacional que proporciona una interfaz para crear familias de objetos relacionados sin especificar sus clases concretas.

Ejemplo en C#:

// Interfaces de productos
public interface IButton {
    void Render();
}

public interface ICheckbox {
    void Render();
}

// Productos concretos para Windows
public class WindowsButton : IButton {
    public void Render() => Console.WriteLine("Renderizando botón de Windows");
}

public class WindowsCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Renderizando checkbox de Windows");
}

// Productos concretos para MacOS
public class MacButton : IButton {
    public void Render() => Console.WriteLine("Renderizando botón de MacOS");
}

public class MacCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Renderizando checkbox de MacOS");
}

// Fábrica abstracta
public interface IGUIFactory {
    IButton CreateButton();
    ICheckbox CreateCheckbox();
}

// Fábricas concretas
public class WindowsFactory : IGUIFactory {
    public IButton CreateButton() => new WindowsButton();
    public ICheckbox CreateCheckbox() => new WindowsCheckbox();
}

public class MacFactory : IGUIFactory {
    public IButton CreateButton() => new MacButton();
    public ICheckbox CreateCheckbox() => new MacCheckbox();
}

// Uso
class Application {
    private IButton button;
    private ICheckbox checkbox;

    public Application(IGUIFactory factory) {
        button = factory.CreateButton();
        checkbox = factory.CreateCheckbox();
    }

    public void Render() {
        button.Render();
        checkbox.Render();
    }
}

// En el código cliente seleccionamos la fábrica necesaria
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();

En este ejemplo, la fábrica abstracta permite crear familias de objetos relacionados (botones y checkboxes) para diferentes plataformas, sin depender de las clases concretas de los productos.