Java Academy · Lektion

Abstract Factory für Produktfamilien

Erstellen Sie mit Abstract Factory Familien verwandter Objekte, etwa UI-Komponenten pro Plattform.

Lektion 3 von 414 Schritte

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.

Kostenlos starten

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

  1. Singleton: Threadsichere Implementierungen
  2. Factory-Method-Pattern
  3. Abstract Factory für Produktfamilien
  4. Builder-Pattern mit Fluent API
← Zurück zu Java Academy