Home > Informatik > Begriffe und Konzepte > Schablonenmethode

Schablonenmethode

Definition

Schablonenmethode

Ein Entwurfsmuster, bei dem in einer Oberklasse eine Methode definiert wird, die den Ablauf eines Algorithmus festlegt. Dabei sind einige wichtige Schritte des Algorithmus durch das Schlüsselwort final fixiert, können also von Unterkalssen nicht überschrieben werden. Andere Schritte des Algorithmus dagegen können oder müssen sogar (abstrakte Methoden) überschrieben werden.

Die Oberklasse gibt also die Schablone oder denRahmen des Algorithmus vor, die Unterklassen steuern die Details.

Beispiel

Betrachten wir dazu den folgenden Quelltext:

abstract class Getraenk
{
    // Schablonenmethode: legt den Ablauf fest
    public final void bereiteZu()
    {
        kocheWasser();
        fuegeHauptZutatHinzu();
        fuegeZusaetzeHinzu();
        serviere();
    }

    private void kocheWasser()
    {
        System.out.println("Wasser wird gekocht.");
    }

    private void serviere()
    {
        System.out.println("Getränk wird serviert.");
    }

    // Diese Methode muss in einer Unterklasse definiert werden:
    protected abstract void fuegeHauptZutatHinzu();
	 
    // Diese Methode kann in einer Unterklasse überschrieben werden
	 // muss aber nicht, wenn keine Zusätze hinhzugefügt werden sollen.
    protected  void fuegeZusaetzeHinzu();
}

class Tee extends Getraenk
{
    @Override
    protected void fuegeHauptZutatHinzu()
    {
        System.out.println("Teebeutel wird ins Wasser gehängt.");
    }

    @Override
    protected void fuegeZusaetzeHinzu()
    {
        System.out.println("Zitrone wird hinzugefügt.");
    }
}

class Kaffee extends Getraenk
{
    @Override
    protected void fuegeHauptZutatHinzu()
    {
        System.out.println("Kaffeepulver wird aufgebrüht.");
    }

    @Override
    protected void fuegeZusaetzeHinzu()
    {
        System.out.println("Milch und Zucker werden hinzugefügt.");
    }
}

Die Methode bereiteZu() ist in diesem Beispiel die Schablonenmethode, sie legt den Ablauf einheitlich fest. Zunächst wird Wasser gekocht, dann wird die Hauptzutat des Getränks hinzugefügt, anschließend können weitere Zutaten hinzugefügt werden, und schließlich wird das Getränk serviert. Damit die Unterklassen diesen grundsätzlichen Ablauf nicht verändern können, ist die Methode als final deklariert worden (siehe auch "finale Methoden" in dieser Abteilung).

Die Methoden kocheWasser() und serviere() müssen bei jedem heißen Getränk durchgeführt werden, die Unterklassen sollen da nichts ändern. Daher wurden diese beiden Methoden in der Oberklasse als private deklariert. Alternativ hätte man sie auch als final kennzeichnen können.

Die Methode fuegeHauptZutatHinzu() ist dagegen als abstract deklariert, sie muss zwingend in den Unterklassen überschrieben werden. Wer will schon nur heißes Wasser ohne Hauptzutat trinken.

Die Methode fuegeZusaetzeHinzu() dagegen ist nicht als abstrakt deklariert, sie muss also nicht überschrieben werden. Wenn dem Heißgetränk jedoch Zusätze wie Milch oder Zucker hinzugefügt werden sollen, dann kann die Methode von der jeweiligen Unterklasse überschrieben werden.

finale Methoden

Ein weiteres Beispiel für Schablonen-Methoden finden Sie in diesem Artikel.

Quellen:

  1. Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.