Sobes.tech
Junior

Donnez un exemple d'utilisation d'une fabrique abstraite

sobes.tech IA

Réponse de l'IA

Une fabrique abstraite est un patron de conception creational qui fournit une interface pour créer des familles d'objets liés sans spécifier leurs classes concrètes.

Exemple en C# :

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

public interface ICheckbox {
    void Render();
}

// Produits concrets pour Windows
public class WindowsButton : IButton {
    public void Render() => Console.WriteLine("Rendu du bouton Windows");
}

public class WindowsCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Rendu de la case à cocher Windows");
}

// Produits concrets pour MacOS
public class MacButton : IButton {
    public void Render() => Console.WriteLine("Rendu du bouton MacOS");
}

public class MacCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Rendu de la case à cocher MacOS");
}

// Fabrique abstraite
public interface IGUIFactory {
    IButton CreateButton();
    ICheckbox CreateCheckbox();
}

// Fábricas concrètes
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();
}

// Utilisation
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 le code client, on choisit la fabrique nécessaire
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();

Dans cet exemple, la fabrique abstraite permet de créer des familles d'objets liés (boutons et cases à cocher) pour différentes plateformes, sans dépendre des classes concrètes des produits.