Sobes.tech
Junior

Dajte primer korišćenja apstraktne fabrike

sobes.tech АИ

Одговор од АИ

Apstraktna fabrika je kreacioni obrazac koji pruža interfejs za kreiranje porodica povezanih objekata bez specificiranja njihovih konkretnih klasa.

Primer u C#:

// Interfejsi proizvoda
public interface IButton {
    void Render();
}

public interface ICheckbox {
    void Render();
}

// Konkreti proizvodi za Windows
public class WindowsButton : IButton {
    public void Render() => Console.WriteLine("Renderovanje Windows dugmeta");
}

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

// Konkreti proizvodi za MacOS
public class MacButton : IButton {
    public void Render() => Console.WriteLine("Renderovanje MacOS dugmeta");
}

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

// Apstraktna fabrika
public interface IGUIFactory {
    IButton CreateButton();
    ICheckbox CreateCheckbox();
}

// Konkrete fabrike
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();
}

// Upotreba
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();
    }
}

// U klijentskom kodu biramo potrebnu fabriku
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();

U ovom primeru, apstraktna fabrika omogućava kreiranje porodica povezanih objekata (dugmića i checkboxova) za različite platforme, bez zavisnosti od konkretnih klasa proizvoda.