Sobes.tech
Junior

Dê um exemplo de uso de uma fábrica abstrata

sobes.tech IA

Resposta da IA

A fábrica abstrata é um padrão de design creacional que fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas.

Exemplo em C#:

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

public interface ICheckbox {
    void Render();
}

// Produtos concretos para Windows
public class WindowsButton : IButton {
    public void Render() => Console.WriteLine("Renderizando botão Windows");
}

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

// Produtos concretos para MacOS
public class MacButton : IButton {
    public void Render() => Console.WriteLine("Renderizando botão MacOS");
}

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

// Fábrica abstrata
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();
    }
}

// No código cliente, escolhemos a fábrica necessária
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();

Neste exemplo, a fábrica abstrata permite criar famílias de objetos relacionados (botões e caixas de seleção) para diferentes plataformas, sem depender das classes concretas dos produtos.