Appearance
Template Method Pattern β
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 β
finalModifier fΓΌrtemplateMethod()β verhindert Γberschreiben der Struktur- Hook-Methoden sind die Erweiterungspunkte β meist
abstractoder 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! π―