Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03143.jsonl.gz/1543

Verwenden Sie das Muster, wenn Sie mehrere Klassen haben, die fast identische Algorithmen mit einigen geringfügigen Unterschieden enthalten. Daher müssen Sie möglicherweise alle Klassen ändern, wenn sich der Algorithmus ändert. Die Vorlagenmethode wird in Frameworks verwendet, in denen jeder die invarianten Teile der Domänenarchitektur implementiert und gleichzeitig Hookmethoden für die Anpassung bereitstellt. Dies ist ein Beispiel für die Umkehrung der Kontrolle. Die Vorlagenmethode wird aus den folgenden Gründen verwendet. [3] Wir erstellen eine abstrakte Game-Klasse, die Operationen definiert, deren Vorlagenmethode so festgelegt ist, dass sie nicht überschrieben werden kann. Cricket und Fußball sind konkrete Klassen, die Game erweitern und seine Methoden außer Kraft setzen. Dieses Muster ist ein Beispiel für die Umkehrung der Kontrolle, da der Code auf hoher Ebene nicht mehr bestimmt, welche Algorithmen ausgeführt werden sollen. Stattdessen wird zur Laufzeit ein Algorithmus auf niedrigerer Ebene ausgewählt.
Das Vorlagenmuster ist nützlich, wenn Sie mit automatisch generiertem Code arbeiten. Die Herausforderung bei der Arbeit mit generiertem Code besteht darin, dass Änderungen am Quellcode zu Änderungen im generierten Code führen. Wenn handschriftliche Änderungen am generierten Code vorgenommen wurden, gehen diese verloren. Wie sollte also der generierte Code angepasst werden? Konkrete Klassen können alle Schritte überschreiben, jedoch nicht die Vorlagenmethode selbst. Das Muster der Vorlagenmethode schlägt vor, dass Sie einen Algorithmus in eine Reihe von Schritten aufschlüsseln, diese Schritte in Methoden umwandeln und eine Reihe von Aufrufen dieser Methoden in einer einzelnen Vorlagenmethode einfügen. Die Schritte können entweder abstrakt sein oder eine Standardimplementierung haben. Um den Algorithmus zu verwenden, muss der Client eine eigene Unterklasse bereitstellen, alle abstrakten Schritte implementieren und bei Bedarf einige der optionalen Schritte überschreiben (jedoch nicht die Vorlagenmethode selbst). Verwenden Sie das Muster der Vorlagenmethode, wenn Sie Clients nur bestimmte Schritte eines Algorithmus erweitern lassen möchten, nicht jedoch den gesamten Algorithmus oder seine Struktur. Der Template-Methodenansatz kann im Massenwohnungsbau verwendet werden. Der architektonische Plan für den Bau eines Standardhauses kann mehrere Erweiterungspunkte enthalten, die es einem potenziellen Eigentümer veranlassen würden, einige Details des resultierenden Hauses anzupassen.
Verwenden Sie die Vorlagenmethode play() des Spiels, um eine definierte Spielweise zu demonstrieren. Zur Laufzeit wird der durch die Vorlagenmethode dargestellte Algorithmus ausgeführt, indem die Vorlagennachricht an eine Instanz einer der konkreten Unterklassen gesendet wird. Durch Vererbung beginnt die Vorlagenmethode in der Basisklasse auszuführen. Wenn die Vorlagenmethode eine Nachricht an die Selbstanforderung einer der Hilfsmethoden sendet, wird die Nachricht von der konkreten Unterinstanz empfangen. Wenn die Hilfsmethode überschrieben wurde, wird die übergeordnete Implementierung in der Unterinstanz ausgeführt. Wenn sie nicht überschrieben wurde, wird die geerbte Implementierung in der Basisklasse ausgeführt. Dieser Mechanismus stellt sicher, dass der Gesamtalgorithmus jedes Mal die gleichen Schritte ausführt, während die Details einiger Schritte davon abhängen, welche Instanz die ursprüngliche Anforderung zum Ausführen des Algorithmus empfangen hat. Das Vorlagenmuster bietet eine Lösung. Wenn der generierte Code dem Vorlagenmethodenmuster folgt, ist der generierte Code alle eine abstrakte Superklasse. Sofern handschriftliche Anpassungen auf eine Unterklasse beschränkt sind, kann der Codegenerator erneut ausgeführt werden, ohne dass das Risiko besteht, dass diese Änderungen überschrieben werden. Bei Verwendung bei der Codegenerierung wird dieses Muster manchmal als Generierungslückenmuster bezeichnet.[7] Die Implementierung von template_method() ist: Aufrufen step_one(), Aufruf step_two() und Aufruf step_three(). step_two() ist eine “Hook”-Methode – ein Platzhalter. Sie wird in der Basisklasse deklariert und dann in abgeleiteten Klassen definiert. Frameworks (große Wiederverwendungsinfrastrukturen) verwenden die Vorlagenmethode viel. Der gesamte wiederverwendbare Code wird in den Basisklassen des Frameworks definiert, und dann können Clients des Frameworks Anpassungen definieren, indem sie nach Bedarf abgeleitete Klassen erstellen.