Zum Inhalt springen

Muster: TemplateMethod

Aus Wikibooks

Schablonenmethode (TemplateMethod)

[Bearbeiten]

Bestimme den Ablauf eines Algorithmus und delegiere die konkrete Ausgestaltung an eine Unterklasse.

Zweck

[Bearbeiten]

Ziel dieses Musters ist es, die Struktur eines Algorithmus bereits festzulegen, während die konkrete Ausgestaltung einzelner Schritte noch offen gelassen wird; es bleibt dann Unterklassen vorbehalten, diese Teile des Algorithmus nachzureichen. Somit können Unterklassen einzelne Schritte beeinflussen - nicht aber die Struktur des Algorithmus.

Dadurch hilft das Schablonenmethoden-Muster auch, eine Verdopplung von Code zu vermeiden: Die invarianten Teile einer Familie von ähnlichen Algorithmen werden genau einmal festgelegt und somit gemeinsames Verhalten aus den Unterklassen "herausfaktorisiert".

Ein sehr einfaches Beispiel aus der Mathematik soll dies verdeutlichen: Für zwei natürliche Zahlen a und b berechnet der folgende Algorithmus das Produkt a*b:

erg = a
wiederhole (b-1) mal:
  erg = erg + a

und der nun folgende die Potenz a^b:

erg = a
wiederhole (b-1) mal:
  erg = erg * a

(Der interessierte Leser wird vielleicht an einer Lektuere des Wikipedia-Artikels zur Ackermann-Funktion Gefallen finden.) Offensichtlich unterscheiden sich diese beiden Algorithmen lediglich durch die im Schleifenkörper ausgeführte Operation; dies ermöglicht die Verwendung des Schablonenmethoden-Musters. Die gemeinsame Struktur lautet:

erg = a
wiederhole (b-1) mal:
  erg = operation(erg, a)

Unterklassen dürfen für "operation()" dann entweder eine Addition, eine Multiplikation oder eine gänzlich andere Funktion (z.B. Potenzieren, hyper4, ...) einsetzen.

Entscheidungshilfen

[Bearbeiten]

Eine Schablonenmethode kann eingesetzt werden, wenn einzelne Teilschritte eines übergeordneten Algorithmus nicht bekannt sind (oder absichtlich offen gelassen werden sollen) aber Vorbedingungen und jene übergeordente Struktur festgelegt werden sollen.

Implementation

[Bearbeiten]

Für die Umsetzung muss folgendes implementiert werden:

  • Eine Klasse mit mindestens einer abstrakten und mindestens einer konkreten (Schablonen)Methode.
  • Innerhalb der konkreten Methode wird die abstrakte aufgerufen.
  • Eine oder mehrere Unterklassen, die das Verhalten der abstrakten Funktion festlegen.

Konkrete Hinweise zur Implementation finden sich zu den Programmiersprachen.

Verwandte Muster

[Bearbeiten]

Fabrikmethoden werden oft von Schablonenmethoden aufgerufen.

Schablonenmethoden verwenden Vererbung, um Teile eines Algorithmus zu variieren; das Muster Strategie verwendet Delegation, um den gesamten Algorithmus zu variieren.