Sobes.tech
Junior

Uveďte příklad použití abstraktní továrny

sobes.tech AI

Odpověď od AI

Abstraktní továrna je návrhový vzor, který poskytuje rozhraní pro vytváření rodin souvisejících objektů bez specifikace jejich konkrétních tříd.

Příklad v C#:

// Rozhraní produktů
public interface IButton {
    void Render();
}

public interface ICheckbox {
    void Render();
}

// Konkrétní produkty pro Windows
public class WindowsButton : IButton {
    public void Render() => Console.WriteLine("Vykreslení tlačítka Windows");
}

public class WindowsCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Vykreslení zaškrtávacího políčka Windows");
}

// Konkrétní produkty pro MacOS
public class MacButton : IButton {
    public void Render() => Console.WriteLine("Vykreslení tlačítka MacOS");
}

public class MacCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Vykreslení zaškrtávacího políčka MacOS");
}

// Abstraktní továrna
public interface IGUIFactory {
    IButton CreateButton();
    ICheckbox CreateCheckbox();
}

// Konkrétní továrny
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();
}

// Použití
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();
    }
}

// V klientském kódu vybíráme potřebnou továrnu
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();

V tomto příkladu abstraktní továrna umožňuje vytvářet rodiny souvisejících objektů (tlačítek a zaškrtávacích políček) pro různé platformy, aniž by závisela na konkrétních třídách produktů.