Java Academy · leksjon

Template Method: definere algoritmeskjeletter

Definer skjelettet til en algoritme i en basisklasse, og la underklassene fylle inn trinnene.

Leksjon 4 av 414 trinn

Template Method: definere algoritmeskjeletter er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hensikten med Template Method

Template Method definerer skjelettet til en algoritme i en basisklasse og overlater enkelte trinn til subklasser. Subklasser kan overstyre trinn uten å endre den overordnede strukturen.

Den abstrakte basisklassen

Basisklassen har template-metoden, vanligvis final, som orkestrerer trinnene. Abstrakte metoder representerer trinnene som varierer. Konkrete metoder gir standardatferd.

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 subklasser

Hver subklasse fyller ut de abstrakte trinnene. Rekkefølgen i template-metoden endres aldri – bare implementasjonen av de enkelte trinnene 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 valgfritt trinn med en standardimplementasjon, ofte tom. Subklasser kan overstyre hooks for å legge til valgfri atferd uten å bli tvunget til å 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();
}

Template Method kontra Strategy

Template Method bruker arv: Skjelettet er fast i basisklassen, mens trinnene overstyres i subklassene. Strategy bruker komposisjon: Hele algoritmen ligger utenfor klassen. Strategy er mer fleksibelt, mens Template Method er enklere når trinnene deler mye kontekst.

Java InputStream som Template Method

read(byte[], int, int) i java.io.InputStream er implementert ved hjelp av den abstrakte read()-metoden. Subklassene implementerer énbytesversjonen, mens lesing av flere byte er templaten.

Template Method for rapportgenerering

Definer en rapportmal: Hent data, formater dem og skriv dem ut. Bytt ut subklasser for PDF-, HTML- eller CSV-utdata uten å endre orkestreringslogikken.

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
}

Forhindre overstyring av templaten

Deklarer template-metoden som final for å hindre subklasser i å endre algoritmestrukturen. Bare hook-metoder og abstrakte metoder bør kunne overstyres.

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

Abstrakte kontra konkrete trinn

Gjør et trinn abstrakt når det må leveres av subklassen. Gjør det konkret, eventuelt tomt, når subklassene kan overstyre det for tilpasning.

Template Method i JUnit

setUp() og tearDown() i JUnit 4 er hooks i template-metoden som er definert av testrunneren. Testrunneren styrer når de kalles.

Template Method i Spring

JdbcTemplate i Spring bruker Template Method internt. Templaten styrer tilkobling, oppretting av setning og opprydding, mens du leverer et RowMapper-lambdauttrykk for trinnet «map row».

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

Unngå dyp arv

Template Method er avhengig av arv, noe som kan føre til dype klassehierarkier. Begrens hierarkiet til 1–2 nivåer. Hvis subklassene begynner å overstyre mange trinn på ulike måter, bør du vurdere å bytte til Strategy.

Hurtigsjekk

Hvilket nøkkelord hindrer subklasser i å endre rekkefølgen i template-metoden?

Oppsummering

Template Method låser algoritmeskjelettet i en basisklasse med final. Subklassene implementerer abstrakte trinn og kan eventuelt overstyre hooks. Hold hierarkiene grunne, og bruk Strategy når du trenger mer fleksibilitet.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Template Method: definere algoritmeskjeletter» gratis?

Ja – hele teksten i «Template Method: definere algoritmeskjeletter» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Template Method: definere algoritmeskjeletter»?

Definer skjelettet til en algoritme i en basisklasse, og la underklassene fylle inn trinnene. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Template Method: definere algoritmeskjeletter»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Observer-mønsteret: hendelsesvarsling
  2. Strategy-mønsteret: utskiftbare algoritmer
  3. Command-mønsteret: kapsle inn handlinger
  4. Template Method: definere algoritmeskjeletter
← Tilbake til Java Academy