Java Academy · Lektion

Template Method: definition af algoritmeskeletter

Definér skelettet til en algoritme i en basisklasse, og lad underklasserne udfylde trinnene.

Lektion 4 af 414 trin

Template Method: definition af algoritmeskeletter er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 4 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.

Skabelonmetodens formål

Skabelonmetoden definerer skelettet til en algoritme i en basisklasse og overlader nogle trin til underklasser. Underklasser kan tilsidesætte trin uden at ændre den overordnede struktur.

Den abstrakte basisklasse

Basisklassen har skabelonmetoden, som normalt er final, og som koordinerer trinnene. Abstrakte metoder repræsenterer de varierende trin. Konkrete metoder leverer standardadfærd.

public abstract class DataProcessor {
    // Template method — final, defines the algorithm
    public final void process() {
        readData();
        processData();
        writeResult();
    }
    protected abstract void readData();
    protected abstract void processData();
    protected void writeResult() {
        System.out.println("Result written (default)");
    }
}

Konkrete underklasser

Hver underklasse udfylder de abstrakte trin. Skabelonmetodens rækkefølge ændres aldrig – kun implementeringen af de enkelte trin varierer.

public class CSVProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading CSV..."); }
    protected void processData() { System.out.println("Parsing CSV rows..."); }
}
public class XMLProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading XML..."); }
    protected void processData() { System.out.println("Parsing XML nodes..."); }
    @Override
    protected void writeResult() { System.out.println("Writing XML result."); }
}

Hook-metoder

En hook er et valgfrit trin med en standardimplementering, som ofte er tom. Underklasser kan tilsidesætte hooks for at tilføje valgfri adfærd uden at være tvunget til at implementere dem.

public abstract class Game {
    public final void play() {
        initialize();
        while (!isDone()) takeTurn();
        printWinner();
    }
    protected void initialize() {}  // hook — optional override
    protected abstract boolean isDone();
    protected abstract void takeTurn();
    protected abstract void printWinner();
}

Skabelonmetoden kontra strategimønstret

Skabelonmetoden bruger nedarvning: Skelettet er fastlagt i basisklassen, og trinnene tilsidesættes i underklasser. Strategimønstret bruger komposition: Hele algoritmen ligger eksternt. Strategimønstret er mere fleksibelt, mens skabelonmetoden er enklere, når trinnene deler meget kontekst.

Java InputStream som skabelonmetode

read(byte[], int, int) i java.io.InputStream er implementeret ved hjælp af den abstrakte read(). Underklasser implementerer versionen til én byte, mens læsning af flere bytes er skabelonen.

Skabelonmetode til generering af rapporter

Definér en rapportskabelon: Indsaml data, formatér dem, og skriv dem ud. Udskift underklasser for PDF-, HTML- eller CSV-output uden at ændre koordinationslogikken.

public abstract class ReportGenerator {
    public final String generate() {
        List<Record> data = fetchData();
        String body = format(data);
        return wrap(body);
    }
    protected abstract List<Record> fetchData();
    protected abstract String format(List<Record> data);
    protected String wrap(String body) { return body; } // hook
}

Forhindring af tilsidesættelse af skabelonen

Deklarér skabelonmetoden som final for at forhindre underklasser i at ændre algoritmens struktur. Kun hook-metoder og abstrakte metoder bør kunne tilsidesættes.

public final void process() {
    validate(); // abstract
    execute();  // abstract
    cleanup();  // hook with default
}

Abstrakte kontra konkrete trin

Gør et trin abstrakt, når det skal leveres af underklassen. Gør det konkret, eventuelt tomt, når underklasser kan tilsidesætte det for at tilpasse adfærden.

Skabelonmetoden i JUnit

setUp() og tearDown() i JUnit 4 er hooks i den skabelonmetode, der er defineret af testkøreren. Køreren styrer, hvornår de kaldes.

Skabelonmetoden i Spring

Spring's JdbcTemplate bruger skabelonmetoden internt. Skabelonen styrer forbindelsen, oprettelsen af statements og oprydningen, mens du leverer en RowMapper-lambda til det varierende trin, hvor en række tilknyttes.

List<User> users = jdbcTemplate.query(
    "SELECT * FROM users",
    (rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);

Undgå dyb nedarvning

Skabelonmetoden bygger på nedarvning, som kan føre til dybe klassehierarkier. Begræns hierarkiet til 1-2 niveauer. Hvis underklasser begynder at tilsidesætte mange trin forskelligt, bør du overveje at skifte til strategimønstret.

Hurtigt tjek

Hvilket nøgleord forhindrer underklasser i at ændre skabelonmetodens rækkefølge?

Opsummering

Skabelonmetoden fastlåser algoritmens skelet i en basisklasse med final. Underklasser implementerer abstrakte trin og kan valgfrit tilsidesætte hooks. Hold hierarkierne flade, og brug strategimønstret, når der er behov for større fleksibilitet.

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 “Template Method: definition af algoritmeskeletter” gratis?

Ja — hele teksten til “Template Method: definition af algoritmeskeletter” 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 “Template Method: definition af algoritmeskeletter”?

Definér skelettet til en algoritme i en basisklasse, og lad underklasserne udfylde trinnene. 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 4 af 4.

Hvor lang tid tager lektionen “Template Method: definition af algoritmeskeletter”?

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. Observer-mønsteret: hændelsesnotifikation
  2. Strategy-mønsteret: udskiftelige algoritmer
  3. Command-mønsteret: indkapsling af handlinger
  4. Template Method: definition af algoritmeskeletter
← Tilbage til Java Academy