Sobes.tech
Junior

Adj példát az absztrakt gyár használatára

sobes.tech MI

Válasz az MI-től

Az absztrakt gyár egy olyan tervezési minta, amely interfészt biztosít kapcsolódó objektumcsaládok létrehozásához anélkül, hogy meghatároznánk azok konkrét osztályait.

Példa C#-ban:

// Termék interfészek
public interface IButton {
    void Render();
}

public interface ICheckbox {
    void Render();
}

// Konkrét termékek Windows-hoz
public class WindowsButton : IButton {
    public void Render() => Console.WriteLine("Windows gomb renderelése");
}

public class WindowsCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("Windows jelölőnégyzet renderelése");
}

// Konkrét termékek MacOS-hez
public class MacButton : IButton {
    public void Render() => Console.WriteLine("MacOS gomb renderelése");
}

public class MacCheckbox : ICheckbox {
    public void Render() => Console.WriteLine("MacOS jelölőnégyzet renderelése");
}

// Absztrakt gyár
public interface IGUIFactory {
    IButton CreateButton();
    ICheckbox CreateCheckbox();
}

// Konkrét gyárak
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();
}

// Használat
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();
    }
}

// A klienskódban kiválasztjuk a szükséges gyárat
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();

Ebben a példában az absztrakt gyár lehetővé teszi kapcsolódó objektumcsaládok (gombok és jelölőnégyzetek) létrehozását különböző platformokra, anélkül, hogy függene a termékek konkrét osztályaitól.