Entwurfsmuster / Design Pattern: Die Schablonenmethode (Template Method)

avatar

Zweck

Definiert das Grundgerüst eines Algorithmus, überlässt aber den Unterklassen die Implementierung von Details. Unterklassen können die variablen Teile des Algorithmus unterschiedlich implementieren, das Grundgerüst des Algorithmus bleibt aber fest.

Motivation

Als Beispiel dient ein Rahmenwerk, in dem die Klassen Applikation und Dokument existieren. Die Klasse Applikation ist dafür verantwortlich, externe Dokumente zu öffnen, die z. B. in einer Datei gespeichert sind. Ein Dokument-Objekt repräsentiert die Information in dem Dokument, sobald es gelesen ist.
Applikationen, die das Rahmenwerk verwenden, definieren Unterklassen von Applikation und Dokument, die dem jeweiligen Problem angepasst sind. Beispielsweise werden für eine Graphikapplikation die Unterklassen GraphikApplikation und Graphik-Dokument definiert, während für eine Textapplikation die Unterklassen TextApplikation und TextDokument definiert würden.

5template1.png
Abbildung 1: Ein Beispiel einer Schablonenmethode

5template2.png
Abbildung 2: Verallgemeinerte Schablonenmethode

Anwendbarkeit

Man benutzt das Muster der Schablonenmethode,

  • um die invarianten Teile eines Algorithmus nur einmal zu implementieren und die Implementierung der variablen Teile Unterklassen zu überlassen
  • wenn gemeinsames Verhalten von Unterklassen in eine gemeinsame Oberklasse vereinigt werden soll, um Codeduplizierung zu vermeiden. Hierzu wird der variable Teil des Codes in separate Methoden ausgelagert, die von einer Schablonenmethode der Oberklasse aufgerufen werden
  • um gezieltes Erweitern durch Unterklassen zu erlauben.

Konsequenzen

Schablonenmethoden sind eine grundlegende Technik zur Codewiederverwendung. In Klassenbibliotheken sind sie besonders wichtig, da sie das gemeinsame Verhalten von Bibliotheksklassen herausfaktorisieren.
Schablonenmethoden führen zu einer invertierten Kontrollstruktur mit dem Namen Hollywood-Prinzip: „Don’t call us, we’ll call you“. Dies bezieht sich darauf, dass die Oberklasse die Unterklassenoperationen aufruft und nicht umgekehrt.
Aus der Dokumentation einer Klasse mit einer Schablonenmethode sollte klar hervorgehen, welche Methoden überschrieben werden müssen und welche Semantik diese haben.

Quellen
[1] Erich Gamma, Richard Helm, Ralph Johnson und John M. Vlissides Design Patterns — Elements of Reusable Object-Oriented Software Addison Wesley, Reading, MA, 1994
[2] Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal Pattern-Oriented Software Architecture — A System of Patterns J. Wiley & Sons, Chichester, 1996



0
0
0.000
0 comments