Muster: TemplateMethod
Schablonenmethode (TemplateMethod)
BearbeitenBestimme den Ablauf eines Algorithmus und delegiere die konkrete Ausgestaltung an eine Unterklasse.
Zweck
BearbeitenZiel 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
BearbeitenEntscheidungshilfen
BearbeitenEine 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
BearbeitenFü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
BearbeitenFabrikmethoden 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.