0Pricing
Java Academy · Lektion

Template Method: Algorithmusgerüste definieren

Definieren Sie das Gerüst eines Algorithmus in einer Basisklasse und lassen Sie Unterklassen die einzelnen Schritte ausfüllen.

Template Method: Algorithmusgerüste definieren ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Die Absicht von Template Method

Template Method definiert das Gerüst eines Algorithmus in einer Basisklasse und überlässt einige Schritte den Unterklassen. Unterklassen können einzelne Schritte überschreiben, ohne die Gesamtstruktur zu ändern.

Die abstrakte Basisklasse

Die Basisklasse enthält die Template-Methode, die üblicherweise final ist und die Schritte orchestriert. Abstrakte Methoden repräsentieren die variierenden Schritte. Konkrete Methoden stellen das Standardverhalten bereit.

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 Unterklassen

Jede Unterklasse implementiert die abstrakten Schritte. Die Reihenfolge der Template-Methode ändert sich nie – nur die Implementierung der einzelnen Schritte variiert.

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-Methoden

Ein Hook ist ein optionaler Schritt mit einer Standardimplementierung, die oft leer ist. Unterklassen können Hooks überschreiben, um optionales Verhalten hinzuzufügen, ohne dazu gezwungen zu sein, sie zu implementieren.

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 vs. Strategy

Template Method verwendet Vererbung: Das Gerüst ist in der Basisklasse festgelegt, die Schritte werden in Unterklassen überschrieben. Strategy verwendet Komposition: Der gesamte Algorithmus befindet sich außerhalb. Strategy ist flexibler; Template Method ist einfacher, wenn die Schritte viel Kontext gemeinsam nutzen.

Java-InputStream als Template Method

Die Methode read(byte[], int, int) von java.io.InputStream ist über die abstrakte Methode read() implementiert. Unterklassen implementieren die Version für ein Byte; das Lesen mehrerer Bytes ist die Template-Methode.

Template Method zur Berichtserstellung

Definieren Sie eine Berichtsvorlage: Erfassen Sie Daten, formatieren Sie sie und geben Sie sie aus. Tauschen Sie Unterklassen für die Ausgabe als PDF, HTML oder CSV aus, ohne die Orchestrierungslogik zu ändern.

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
}

Überschreiben der Template-Methode verhindern

Deklarieren Sie die Template-Methode als final, damit Unterklassen die Algorithmusstruktur nicht ändern können. Nur die Hook- und abstrakten Methoden sollten überschreibbar sein.

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

Abstrakte und konkrete Schritte

Definieren Sie einen Schritt als abstrakt, wenn er von der Unterklasse implementiert werden muss. Definieren Sie ihn als konkret, gegebenenfalls leer, wenn Unterklassen ihn zur Anpassung überschreiben dürfen.

Template Method in JUnit

setUp() und tearDown() von JUnit 4 sind Hooks in der vom Test-Runner definierten Template Method. Der Runner steuert, wann sie aufgerufen werden.

Template Method in Spring

Springs JdbcTemplate verwendet intern Template Method. Die Template-Methode steuert Verbindung, Statement-Erstellung und Bereinigung; Sie stellen ein RowMapper-Lambda für den variierenden Schritt „Zeile abbilden“ bereit.

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

Tiefe Vererbung vermeiden

Template Method basiert auf Vererbung, wodurch tiefe Klassenhierarchien entstehen können. Beschränken Sie sich auf ein bis zwei Ebenen. Wenn Unterklassen beginnen, viele Schritte auf unterschiedliche Weise zu überschreiben, sollten Sie zu Strategy wechseln.

Kurzer Test

Welches Schlüsselwort verhindert, dass Unterklassen die Reihenfolge der Template-Methode ändern?

Zusammenfassung

Template Method fixiert das Algorithmusgerüst mit final in einer Basisklasse. Unterklassen implementieren abstrakte Schritte und überschreiben optional Hooks. Halten Sie Hierarchien flach und verwenden Sie Strategy, wenn mehr Flexibilität erforderlich ist.

Häufig gestellte Fragen

Ist die Lektion „Template Method: Algorithmusgerüste definieren“ kostenlos?

Ja — der vollständige Text von „Template Method: Algorithmusgerüste definieren“ 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 „Template Method: Algorithmusgerüste definieren“?

Definieren Sie das Gerüst eines Algorithmus in einer Basisklasse und lassen Sie Unterklassen die einzelnen Schritte ausfüllen. 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 4 von 4.

Wie lange dauert die Lektion „Template Method: Algorithmusgerüste definieren“?

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. Observer-Pattern: Ereignisbenachrichtigung
  2. Strategy-Pattern: Austauschbare Algorithmen
  3. Command-Pattern: Aktionen kapseln
  4. Template Method: Algorithmusgerüste definieren
← Zurück zu Java Academy