Definition:
Ein Rahmen zur Definition eines Algorithmus in einer Operation, wodurch einige Schritte auf eine Unterklasse verzögert werden. Dadurch kann eine Unterklasse bestimmte spezifische Schritte eines Algorithmus neu definieren, ohne die Struktur eines Algorithmus zu ändern.
Es klingt sehr hochwertig, mein Verständnis:
1. Die übergeordnete Klasse deklariert mehrere abstrakte Methoden (Grundmethoden) und mehrere spezifische Methoden (Vorlagenmethoden)
2. Die abstrakte Methode ist ein Schritt eines Algorithmus (Prozess), der in einer Unterklasse implementiert wird
3. Die Vorlagenmethode ist ein Algorithmus (Prozess) Framework. Es wurde in der übergeordneten Klasse vereinbart, Anrufe an grundlegende Methoden zu implementieren und feste Logik zu vervollständigen.
4. Die Struktur eines Algorithmus (Prozess) ist in der übergeordneten Klasse definiert, und die spezifischen Implementierungsdetails werden in der Unterklasse implementiert.
Hinweis: Um böswillige Operationen zu verhindern, wird die allgemeine Vorlagenmethode mit endgültigem und das Umschreiben verboten.
Allgemeines Klassendiagramm:
Tatsächlich ist die Vorlagenmethode ein häufig verwendetes Muster in der Programmierung. Schauen wir uns zuerst ein Beispiel an. Eines Tages hat Programmierer A eine Aufgabe: Geben Sie eine Reihe von Ganzzahlen an, sortieren Sie die Zahlen im Array von klein bis groß und drucken Sie dann die sortierten Ergebnisse aus. Nach der Analyse kann diese Aufgabe grob in zwei Teile unterteilt werden: Sortieren und Drucken. Die Druckfunktion ist einfach zu implementieren, daher ist das Sortieren etwas problematisch. Aber A hat einen Weg, vervollständigen Sie zuerst die Druckfunktion und finden Sie jemanden, der die Sortierfunktion ausführt.
Abstract Class AbstractSort { / *** Sortieren Sie das Array von klein bis groß* @param Array* / Protected Abstract void Sort (int [] Array); public void showSoSorresult (int [] Array) {this.sort (Array); System.out.print ("Sortierenergebnis:"); für (int i = 0; i <array.length; i ++) {System.out.printf ("%3S", Array [i]); }}}Nach dem Schreiben fand ein Kollege, der gerade seinen Abschluss gemacht und mit der Arbeit begonnen hatte und sagte: Es gibt eine Aufgabe, ich habe bereits die Hauptlogik geschrieben, damit Sie die verbleibende Logik implementieren können. Also gab ich die AbstractSort -Klasse B und B schreiben und b schreiben ließ, um sie zu implementieren. B übernahm es und sah es. Es war zu einfach. Es wurde in 10 Minuten gemacht. Der Code ist wie folgt:
Klasse ConcreteSort erweitert AbstractSort {@Override Protected void sort (int [] array) {für (int i = 0; i <array.length-1; i ++) {selectSort (Array, i); }} private void selectSort (int [] array, int index) {int minValue = 32767; // min Value Variable int Indexmin = 0; // Min Value Index Variable Int Temp; // Staging -Variable für (int i = index; i <array.length; i ++) {if (array [i] <minValue) {// finde den Minimumwert minvalue = array [i]; // Speichern Sie den Mindestwert indexmin = i; }} Temp = array [index]; // zwei numerische Werte Array [index] = array [indexmin] tauschen; Array [indexmin] = temp; }}Geben Sie es nach dem Schreiben einem und einem Willen, es zu führen, um es zu führen:
Public Class Client {public static int [] a = {10, 32, 1, 9, 5, 7, 12, 0, 4, 3}; // Voreingestellte Datenarray Public static void main (String [] args) {AbstractSort S = new ConcreteSort (); sshowSortresult (a); }} Auslaufergebnisse:
Sortieren Sie Ergebnisse: 0 1 3 4 5 7 9 10 12 32
Struktur des Template -Methode -Musters
Das Muster der Vorlagenmethode besteht aus einer abstrakten Klasse und einer (oder einer Gruppe von) Implementierungsklassen durch Vererbungsstrukturen. Die Methoden in abstrakten Klassen sind in drei Typen unterteilt:
Abstract -Methode: Die übergeordnete Klasse deklariert sie jedoch nur, implementiert sie jedoch nicht, definiert sie jedoch die Spezifikationen und implementiert sie dann durch ihre Unterklasse.
Vorlagenmethode: Deklariert und implementiert von abstrakten Klassen. Im Allgemeinen rufen Vorlagenmethoden abstrakte Methoden auf, um die wichtigsten logischen Funktionen zu vervollständigen, und Vorlagenmethoden werden meist als endgültige Typen definiert, was darauf hinweist, dass die logischen Hauptfunktionen nicht in Unterklassen neu geschrieben werden können.
Hook -Methode: Deklariert und implementiert von abstrakter Klasse. Unterklassen können jedoch erweitert werden, und Unterklassen können die Logik von Vorlagenmethoden durch Erweiterung von Hakenmethoden beeinflussen.
Die Aufgabe der abstrakten Klassen besteht darin, einen logischen Rahmen zu erstellen, der normalerweise von erfahrenem Personal verfasst wurde, da die Qualität der abstrakten Klassen direkt bestimmt, ob das Programm stabil ist.
Implementierungsklassen werden verwendet, um Details zu implementieren. Die Vorlagenmethode in abstrakten Klassen vervollständigt die Geschäftslogik, indem Klassenerweiterungsmethoden implementiert werden. Solange die Erweiterungsmethode in der Implementierungsklasse Unit -Test besteht, hat die Gesamtfunktion im Allgemeinen keine größeren Fehler unter der Prämisse, dass die Vorlagenmethode korrekt ist.
Vorteile des Vorlagenmethodenmodus:
1.. Einkapseln Sie den unveränderten Teil und erweitern Sie den variablen Teil
2. Extrahieren Sie den öffentlichen Teil des Codes für eine einfache Wartung
3. Das Verhalten wird von der übergeordneten Klasse gesteuert und von der Kinderklasse implementiert
Anwendbare Szenarien für den Vorlagenmethodenmodus:
1. Mehrere Unterklassen haben öffentliche Methoden und die Logik ist im Grunde dasselbe
2. Für komplexe Algorithmen ist der Kernalgorithmus als Vorlagenmethode entwickelt, und die detaillierten Funktionen werden von jeder Unterklasse implementiert.
3.. Refactoring des Code
Erweiterung des Template -Methode -Musters
Zusammenfassen:
Die übergeordnete Klasse stellt ein Framework fest. Nachdem die untergeordnete Klasse einige Methoden der übergeordneten Klasse umgeschrieben hat, ruft sie die von der Elternklasse geerbte Methode auf, um unterschiedliche Ergebnisse zu erzielen.