Java Academy · Lektion

Abstract Factory til produktfamilier

Opret familier af relaterede objekter (f.eks. UI-komponenter pr. platform) med Abstract Factory.

Lektion 3 af 414 trin

Abstract Factory til produktfamilier er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.

Abstract Factory-mønsterets formål

Abstract Factory leverer en grænseflade til at oprette familier af relaterede objekter uden at angive deres konkrete klasser. Det sikrer, at produkter fra den samme fabrik er kompatible.

Problemet: Inkonsekvente produktfamilier

Uden Abstract Factory kan du komme til at blande en Windows-knap med et Mac-afkrydsningsfelt. Mønsteret sikrer, at alle produkter kommer fra den samme fabrik, så de er visuelt eller funktionelt konsistente.

Abstract Factory-grænsefladen

Definér en grænseflade med en oprettelsesmetode for hvert produkt i familien. Hver konkret fabrik implementerer alle metoderne for én variant.

public interface UIFactory {
    Button   createButton();
    Checkbox createCheckbox();
    TextField createTextField();
}

Konkrete fabrikker

Hver konkret fabrik opretter alle produkter til én platform eller ét tema. Klientkoden refererer kun til grænsefladen, ikke til de konkrete fabrikker.

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 produktgrænseflader

Hver produkttype har sin egen grænseflade. Konkrete produkter implementerer den for hver platform. Klientkoden arbejder med det abstrakte produkt, ikke det konkrete.

public interface Button   { void render(); void onClick(); }
public interface Checkbox  { void render(); boolean isChecked(); }
public interface TextField { void render(); String getValue(); }

Klient, der bruger fabrikken

Klienten modtager en fabrik gennem sin konstruktør. Den kalder fabriksmetoder for at oprette widgets og bruger dem gennem abstrakte produktgrænseflader — helt afkoblet fra konkrete klasser.

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

Valg af fabrik under kørsel

Vælg den konkrete fabrik ud fra miljøet eller konfigurationen, og injicér den. Resten af programmet nævner aldrig platformspecifikke klasser.

String os = System.getProperty("os.name").toLowerCase();
UIFactory factory = os.contains("mac") ? new MacUIFactory() : new WindowsUIFactory();
new Application(factory).buildUI();

Tilføjelse af et nyt produkt til familien

Hvis du tilføjer et nyt produkt (f.eks. Slider), skal du opdatere den abstrakte fabriksgrænseflade og alle konkrete fabrikker — det er en ulempe ved mønsteret.

public interface UIFactory {
    Button   createButton();
    Checkbox createCheckbox();
    Slider   createSlider(); // new product — must update ALL factories
}

Abstract Factory kontra Factory Method

Factory Method opretter ét produkt via underklassificering. Abstract Factory opretter en produktpakke via komposition. Abstract Factory implementeres typisk ved hjælp af et sæt fabriksmetoder.

Abstract Factory til databas 드ivere

En abstrakt fabrik af typen ConnectionFactory kan producere objekter af typerne Connection, Statement og ResultSet. Skift mellem MySQL og PostgreSQL ved at ændre fabrikken.

public interface DBFactory {
    Connection  createConnection();
    Statement   createStatement();
}
public class MySQLFactory implements DBFactory { ... }
public class PgFactory   implements DBFactory { ... }

Abstract Factory med Spring-profiler

I Spring Boot definerer du en UIFactory-bean forskelligt for hver profil: Programmet injicerer altid UIFactory, og Spring finder den korrekte konkrete fabrik for den aktive profil.

@Configuration
@Profile("mac")
public class MacConfig {
    @Bean UIFactory uiFactory() { return new MacUIFactory(); }
}

Sikring af konsistens

Den vigtigste fordel er, at en fabrik kun producerer kompatible produkter. Når du bruger Abstract Factory korrekt, kan du aldrig ved et uheld få et Mac-afkrydsningsfelt sammen med en Windows-knap.

Hurtigt tjek

Hvad garanterer Abstract Factory, som Factory Method ikke gør?

Opsummering

Abstract Factory opretter familier af relaterede objekter gennem en fælles grænseflade. Du kan udskifte hele produktfamilier ved at ændre fabrikken. Mønsteret er bedst, når produkterne skal være konsistente, men giver ekstra arbejde, når du tilføjer nye produkttyper.

Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “Abstract Factory til produktfamilier” gratis?

Ja — hele teksten til “Abstract Factory til produktfamilier” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Abstract Factory til produktfamilier”?

Opret familier af relaterede objekter (f.eks. UI-komponenter pr. platform) med Abstract Factory. Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Abstract Factory til produktfamilier”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Singleton: trådsikre implementeringer
  2. Factory Method-mønsteret
  3. Abstract Factory til produktfamilier
  4. Builder-mønsteret med fluent API
← Tilbage til Java Academy