Beim Strategiemuster geht es darum, dass der Client zur Laufzeit konkrete Algorithmen implementiert. Alle Algorithmen sind isoliert und unabhängig, implementieren jedoch eine gemeinsame Schnittstelle, und es gibt keine Vorstellung davon, bestimmte Schritte innerhalb des Algorithmus zu definieren. Können wir nun die Sortierung als Vorlagenmethode implementieren? Sicherlich können Sie, aber Sie werden nicht viel /jede Gemeinsamkeit zu abstrahieren und in der Basis-Implementierung platziert werden. Es wird also der Zweck des Vorlagenmethodenmusters besiegt. Im Vorlagenmuster verfügt die Basisklasse über einen Algorithmus. Es maximiert die Wiederverwendung zwischen den Unterklassen. Da der Algorithmus an einem Ort liegt, schützt die Basisklasse sie. 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.
Bei der Vorlagenmethode geht es darum, Unterklassen bestimmte Schritte des Algorithmus neu definieren zu lassen, ohne die Hauptstruktur und die Schritte des In der Basisklasse definierten Algorithmus zu ändern. Das Vorlagenmuster verwendet in der Regel Vererbung, sodass eine generische Implementierung von Algorithmen in der Basisklasse bereitgestellt werden kann, die die Unterklasse bei Bedarf überschreiben kann. Die Mustername-Vorlagenmethode bedeutet, was sie ist. Angenommen, wir haben eine Methode CalculateSomething() und wir möchten diese Methode vorlagen. Diese Methode wird in der Basisklasse als nicht virtuelle Methode deklariert. Sagen Sie, die Methode sieht so aus. 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. Die Abstrakte Klasse deklariert Methoden, die als Schritte eines Algorithmus fungieren, sowie die eigentliche Vorlagenmethode, die diese Methoden in einer bestimmten Reihenfolge aufruft. Die Schritte können entweder als abstrakt deklariert werden oder eine Standardimplementierung haben. Das Vorlagenmuster ähnelt dem Strategiemuster. Diese beiden Muster unterscheiden sich in Umfang und Methodik. Ein Nachteil der Strategie ist, dass es zu viel Coderedundanz und weniger Codefreigabe gibt. Wie im vorgestellten Beispiel dieses Artikels offensichtlich ist, muss ich den gleichen Code immer wieder in vier Klassen wiederholen. Daher ist es schwer zu warten, denn wenn die Implementierung unseres Systems, wie Z. 4, die allen gemeinsam ist, geändert wird, dann muss ich dies in allen 5 Klassen aktualisieren. Auf der anderen Seite kann ich in der Vorlagenmethode nur die Übergeordneteklasse ändern, und die Änderungen werden in die Unterklassen widergespiegelt.
Daher bietet die Vorlagenmethode eine sehr geringe Redundanz und eine hohe Menge an Codefreigabe zwischen den Klassen. Ein Merkmal der Vorlagenmethode ist, dass die Vorlagenmethode den Algorithmus steuert. Was in anderen Situationen gut sein kann, aber in meinem Problem beschränkte mich das auf die Gestaltung der Klassen.