Java Reference
In-Depth Information
Da die Schablonenmethode den Vertrag der Einschubmethoden vorgibt und eine Un-
terklasse den Vertrag nach dem liskovschen Substitutionsprinzip einhalten muss, ist
die Schablonenmethode nicht von der speziellen Implementierung einer Unterklasse
abhängig. Man spricht daher auch von Dependency Inversion .
Einschubmethoden sind in der Regel speziell für den jeweiligen
Algorithmus der Schablonenmethode geschaffen. Sie werden da-
her nicht von außerhalb der Schablonenmethode, sondern nur
von der Schablonenmethode selbst, aufgerufen. Bei den Ein-
schubmethoden handelt es sich also um nicht öffentlich zu-
gängliche Servicemethoden.
Damit Einschubmethoden nicht von außerhalb benutzt werden können, können sie
beispielsweise in Java als protected deklariert werden.
Eine Schablonenmethode enthält das Grundgerüst eines Algorithmus mit der Zerle-
gung des Algorithmus in Einschubmethoden und deren Aufrufreihenfolge. Diese Defi-
nition wird als invariant angesehen und soll daher von Subklassen nicht überschrieben
werden. Um dies zu verdeutlichen, kann eine Schablonenmethode in Java als final
deklariert werden bzw. in UML mit der Einschränkung {leaf} versehen werden. Soll
ein Algorithmus komplett ausgetauscht werden, ist das Muster Schablonenmethode
nicht anwendbar. Für den Zweck des Austauschs eines kompletten Algorithmus kann
das Strategie-Muster eingesetzt werden.
Im folgenden Klassendiagramm und im anschließenden Programmbeispiel werden die
Möglichkeiten von UML bzw. Java genutzt. In Java wird die Schablonenmethode als
final und werden die Einschubmethoden als protected deklariert, sodass sie nur
von Unterklassen überschrieben werden können.
4.9.3.1 Klassendiagramm
Das Entwurfsmuster Schablonenmethode versucht, soviel Code wie möglich in einer
abstrakten Basisklasse zu spezifizieren, und legt die Verträge der Einschubmethoden
fest. Die Implementierung einer abstrakten Einschubmethode ist in der Vaterklasse
noch nicht bekannt, nur ihr Vertrag. Die Implementierung der abstrakten Methoden der
Basisklasse wird bewusst an die noch nicht existierenden Unterklassen delegiert.
Die Schablonenmethode der Klasse AbstrakteKlasse ist vollständig implementiert
und benutzt in folgendem Beispiel für ihren Algorithmus die Einschubmethoden ein-
schubmethode1() und einschubmethode2() . Das Besondere an diesen Ein-
schubmethoden ist, dass sie abstrakt sind - die Einschubmethoden werden erst in
einer spezialisierenden Unterklasse implementiert. Das folgende Klassendiagramm
zeigt dieses Beispiel:
Search WWH ::




Custom Search