Template Method: definere algoritmeskjeletter
Definer skjelettet til en algoritme i en basisklasse, og la underklassene fylle inn trinnene.
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.
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
- Observer-mønsteret: hendelsesvarsling
- Strategy-mønsteret: utskiftbare algoritmer
- Command-mønsteret: kapsle inn handlinger
- Template Method: definere algoritmeskjeletter