Sobes.tech
Junior

Uveďte príklad použitia abstraktnej továrne

sobes.tech AI

Odpoveď od AI

Abstraktná továreň je tvorivý vzor, ktorý poskytuje rozhranie na vytváranie rodín súvisiacich objektov bez špecifikácie ich konkrétnych tried.

Príklad v C#:

// Rozhrania produktov
public interface IButton {
    void Render();
}

public interface ICheckbox {
    void Render();
}

// Konkrétne produkty pre Windows
public class WindowsButton : IButton {
    public void Render() => Console.WriteLine("Vykresľovanie tlačidla Windows");
}

public class WindowsCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Vykresľovanie zaškrtávacieho políčka Windows");
}

// Konkrétne produkty pre MacOS
public class MacButton : IButton {
    public void Render() => Console.WriteLine("Vykresľovanie tlačidla MacOS");
}

public class MacCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Vykresľovanie zaškrtávacieho políčka MacOS");
}

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

// Konkrétne továrne
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žitie
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 klientskom kóde vyberáme potrebnú továreň
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();

V tomto príklade abstraktná továreň umožňuje vytváranie rodín súvisiacich objektov (tlačidiel a zaškrtávacích políčok) pre rôzne platformy, bez závislosti od konkrétnych tried produktov.