Abstract Factory für Produktfamilien
Erstellen Sie mit Abstract Factory Familien verwandter Objekte, etwa UI-Komponenten pro Plattform.
Abstract Factory für Produktfamilien ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Zweck des Abstract-Factory-Musters
Das Abstract-Factory-Muster stellt eine Schnittstelle zum Erzeugen von Familien verwandter Objekte bereit, ohne deren konkrete Klassen festzulegen. Es stellt sicher, dass die Produkte einer Factory kompatibel sind.
Das Problem: Inkonsistente Produktfamilien
Ohne das Abstract-Factory-Muster könnten Sie einen Windows-Button mit einer Mac-Checkbox kombinieren. Das Muster erzwingt, dass alle Produkte aus derselben Factory stammen, und stellt so visuelle oder funktionale Konsistenz sicher.
Schnittstelle der Abstract Factory
Definieren Sie für jedes Produkt der Familie eine Erzeugungsmethode in einer Schnittstelle. Jede konkrete Factory implementiert alle Methoden für eine Variante.
public interface UIFactory {
Button createButton();
Checkbox createCheckbox();
TextField createTextField();
}Konkrete Factorys
Jede konkrete Factory erzeugt alle Produkte für eine Plattform oder ein Theme. Der Clientcode verwendet nur die Schnittstelle, nicht die konkreten Factorys.
public class WindowsUIFactory implements UIFactory {
public Button createButton() { return new WindowsButton(); }
public Checkbox createCheckbox() { return new WindowsCheckbox(); }
public TextField createTextField() { return new WindowsTextField(); }
}
public class MacUIFactory implements UIFactory {
public Button createButton() { return new MacButton(); }
public Checkbox createCheckbox() { return new MacCheckbox(); }
public TextField createTextField() { return new MacTextField(); }
}Abstrakte Produktschnittstellen
Jeder Produkttyp besitzt seine eigene Schnittstelle. Konkrete Produkte implementieren diese für jede Plattform. Der Clientcode arbeitet mit dem abstrakten Produkt, nicht mit dem konkreten.
public interface Button { void render(); void onClick(); }
public interface Checkbox { void render(); boolean isChecked(); }
public interface TextField { void render(); String getValue(); }Client mit der Factory
Der Client erhält eine Factory über seinen Konstruktor. Er ruft Factory-Methoden auf, um Widgets zu erzeugen, und verwendet sie über abstrakte Produktschnittstellen – vollständig von konkreten Klassen entkoppelt.
public class Application {
private final UIFactory factory;
public Application(UIFactory factory) { this.factory = factory; }
public void buildUI() {
Button btn = factory.createButton();
Checkbox cb = factory.createCheckbox();
btn.render();
cb.render();
}
}Die Factory zur Laufzeit auswählen
Wählen Sie die konkrete Factory anhand der Umgebung oder Konfiguration aus und injizieren Sie sie. Der restliche Anwendungscode erwähnt niemals plattformspezifische Klassen.
String os = System.getProperty("os.name").toLowerCase();
UIFactory factory = os.contains("mac") ? new MacUIFactory() : new WindowsUIFactory();
new Application(factory).buildUI();Ein neues Produkt zur Familie hinzufügen
Das Hinzufügen eines neuen Produkts (z. B. Slider) erfordert die Aktualisierung der Schnittstelle der Abstract Factory und aller konkreten Factorys – ein Nachteil dieses Musters.
public interface UIFactory {
Button createButton();
Checkbox createCheckbox();
Slider createSlider(); // new product — must update ALL factories
}Abstract-Factory-Muster im Vergleich zum Factory-Method-Muster
Das Factory-Method-Muster erzeugt durch Unterklassenbildung ein einzelnes Produkt. Das Abstract-Factory-Muster erzeugt durch Komposition eine Produktsuite. Das Abstract-Factory-Muster wird typischerweise mithilfe mehrerer Factory-Methoden implementiert.
Abstract Factory für Datenbanktreiber
Eine abstrakte Factory ConnectionFactory kann Objekte vom Typ Connection, Statement und ResultSet erzeugen. Wechseln Sie zwischen MySQL und PostgreSQL, indem Sie die Factory austauschen.
public interface DBFactory {
Connection createConnection();
Statement createStatement();
}
public class MySQLFactory implements DBFactory { ... }
public class PgFactory implements DBFactory { ... }Abstract Factory mit Spring-Profilen
Definieren Sie in Spring Boot eine UIFactory-Bean je nach Profil unterschiedlich: Die Anwendung injiziert immer UIFactory; Spring löst die passende konkrete Factory für das aktive Profil auf.
@Configuration
@Profile("mac")
public class MacConfig {
@Bean UIFactory uiFactory() { return new MacUIFactory(); }
}Konsistenz sicherstellen
Der zentrale Vorteil: Eine Factory erzeugt ausschließlich kompatible Produkte. Bei korrekter Verwendung des Abstract-Factory-Musters können Sie niemals versehentlich eine Mac-Checkbox mit einem Windows-Button kombinieren.
Kurze Überprüfung
Was garantiert das Abstract-Factory-Muster, das das Factory-Method-Muster nicht garantiert?
Zusammenfassung
Das Abstract-Factory-Muster erzeugt Familien verwandter Objekte über eine gemeinsame Schnittstelle. Durch Austauschen der Factory können Sie ganze Produktfamilien wechseln. Es eignet sich am besten, wenn Produkte konsistent sein müssen, verursacht aber zusätzlichen Aufwand beim Hinzufügen neuer Produkttypen.
Lerne Java mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 104
- Lektionen
- 374
Häufig gestellte Fragen
Ist die Lektion „Abstract Factory für Produktfamilien“ kostenlos?
Ja — der vollständige Text von „Abstract Factory für Produktfamilien“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Abstract Factory für Produktfamilien“?
Erstellen Sie mit Abstract Factory Familien verwandter Objekte, etwa UI-Komponenten pro Plattform. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Abstract Factory für Produktfamilien“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Singleton: Threadsichere Implementierungen
- Factory-Method-Pattern
- Abstract Factory für Produktfamilien
- Builder-Pattern mit Fluent API