Muster: TemplateMethod
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.
UML
[Bearbeiten]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.