Junior
Podaj przykład użycia fabryki abstrakcyjnej
sobes.tech AI
Odpowiedź od AI
Abstrakcyjna fabryka to wzorzec kreacyjny, który zapewnia interfejs do tworzenia rodzin powiązanych obiektów bez określania ich konkretnych klas.
Przykład w C#:
// Interfejsy produktów
public interface IButton {
void Render();
}
public interface ICheckbox {
void Render();
}
// Konkrety produktów dla Windows
public class WindowsButton : IButton {
public void Render() => Console.WriteLine("Renderowanie przycisku Windows");
}
public class WindowsCheckbox : ICheckbox {
public void Render() => Console.WriteLine("Renderowanie pola wyboru Windows");
}
// Konkrety produktów dla MacOS
public class MacButton : IButton {
public void Render() => Console.WriteLine("Renderowanie przycisku MacOS");
}
public class MacCheckbox : ICheckbox {
public void Render() => Console.WriteLine("Renderowanie pola wyboru MacOS");
}
// Abstrakcyjna fabryka
public interface IGUIFactory {
IButton CreateButton();
ICheckbox CreateCheckbox();
}
// Konkretne fabryki
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();
}
// Użycie
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();
}
}
// W kodzie klienta wybieramy potrzebną fabrykę
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();
W tym przykładzie abstrakcyjna fabryka pozwala na tworzenie rodzin powiązanych obiektów (przycisków i pól wyboru) dla różnych platform, nie zależąc od konkretnych klas produktów.