Skip to content

Template Method Pattern ​

🟒 EinfachBearbeitet β˜‘οΈ10.03.2026

Zusammenfassung ​

Das Template Method Pattern definiert das Skelett eines Algorithmus in einer Basisklasse und ΓΌberlΓ€sst einzelne Schritte den Subklassen. Es verhindert Code-Duplikation und erzwingt eine einheitliche Abfolge.

Kernkonzept ​

Abstrakte Basisklasse enthΓ€lt die templateMethod(), die den Ablauf festlegt. Diese ruft abstrakte Methoden auf, die Subklassen implementieren mΓΌssen.

Der Kontrollfluss bleibt in der Basisklasse β€” Subklassen fΓΌllen nur ihre spezifischen Teile aus ("Hollywood Principle": Don't call us, we call you).

Ideal fΓΌr Szenarien mit gemeinsamen Prozessschritten, aber unterschiedlichen Implementierungsdetails pro Subklasse.

Code-Beispiel ​

java
// Abstrakte Basisklasse definiert Algorithmus-Struktur
abstract class GetrΓ€nk {
    // Template Method β€” Struktur ist final!
    public final void zubereiten() {
        wasserKochen();
        getrΓ€nkZubereiten();      // Abstrakt
        inTasseGießen();
        wΓΌrzungenHinzufΓΌgen();    // Abstrakt
    }
    
    private void wasserKochen() {
        System.out.println("Wasser wird gekocht...");
    }
    
    private void inTasseGießen() {
        System.out.println("In Tasse gießen...");
    }
    
    // Hook-Methoden (abstrakt)
    protected abstract void getrΓ€nkZubereiten();
    protected abstract void wΓΌrzungenHinzufΓΌgen();
}

// Konkrete Implementierungen
class Kaffee extends GetrΓ€nk {
    @Override
    protected void getrΓ€nkZubereiten() {
        System.out.println("Kaffee wird gebrΓΌht...");
    }
    
    @Override
    protected void wΓΌrzungenHinzufΓΌgen() {
        System.out.println("Zucker und Milch hinzufΓΌgen");
    }
}

class Tee extends GetrΓ€nk {
    @Override
    protected void getrΓ€nkZubereiten() {
        System.out.println("Teebeutel in Wasser legen...");
    }
    
    @Override
    protected void wΓΌrzungenHinzufΓΌgen() {
        System.out.println("Honig hinzufΓΌgen");
    }
}

Wichtige Punkte ​

  • final Modifier fΓΌr templateMethod() β€” verhindert Überschreiben der Struktur
  • Hook-Methoden sind die Erweiterungspunkte β€” meist abstract oder mit Default-Implementierung
  • Umgekehrte AbhΓ€ngigkeit β€” Framework/Basisklasse ruft Code der Subklasse auf
  • Single Responsibility β€” jede Subklasse kΓΌmmert sich nur um ihre Teile
  • Inversion of Control β€” Kontrollfluss liegt nicht bei der Subklasse

Klassische Fragen ​

Was ist der Unterschied zu Strategy Pattern? ​

Template Method definiert die Struktur in einer Vererbungshierarchie (Compile-Zeit), wΓ€hrend Strategy Algorithmen als austauschbare Objekte zur Laufzeit injiziert. Template Method ist fΓΌr enge Verwandtschaften, Strategy fΓΌr flexible Austauschbarkeit.


Kann ich Hook-Methoden optional machen? ​

Ja! Mit konkreten Hook-Methoden (nicht abstract) mit Default-Implementierung. Subklassen kΓΆnnen sie ΓΌberschreiben, mΓΌssen aber nicht. Ideal fΓΌr seltene Erweiterungen.


Warum final fΓΌr templateMethod()? ​

Weil die Struktur des Algorithmus nicht verΓ€ndert werden darf β€” nur einzelne Schritte. Ohne final kΓΆnnte eine Subklasse den ganzen Ablauf zerstΓΆren.


Wusstest du schon? ​

Das Template Method Pattern steckt ΓΌberall in Java-APIs β€” z.B. in AbstractList (wo add(), get(), remove() abstrakt sind) oder in Servlet.service() β†’ doGet(), doPost(). Du nutzt es also lΓ€ngst, ohne es zu merken! 🎯