23 Entwurfsmuster, Kapitel 12: Java -Vorlagenmethode -Modus
Definition: Definiert den Rahmen eines Algorithmus in einer Operation und verzögert einige Schritte in einer Unterklasse, damit die Unterklasse bestimmte spezifische Schritte im Algorithmus neu definieren kann, ohne die Struktur des Algorithmus zu ändern.
Typ: Verhaltensmuster
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
Es läuft normal. Ok, die Aufgabe ist abgeschlossen. Das ist richtig, dies ist das Muster der Vorlagenmethode. Die meisten Absolventen, die gerade am Arbeitsplatz eingetreten sind, sollten ähnliche Erfahrungen haben. Eine komplexe Aufgabe wird von den großen Personen des Unternehmens geschrieben und dann die einfacheren Methoden in die Abstraktion schreiben und sie an andere Kollegen übergeben, um sich zu entwickeln. Diese Arbeitsteilung wird häufig in Unternehmen mit relativ offensichtlichen Programmierern verwendet. Wenn beispielsweise ein Projektteam Architekten, Senior -Ingenieure und Junior -Ingenieure hat, verwenden die Architekten im Allgemeinen eine große Anzahl von Schnittstellen und abstrakten Klassen, um die Logik des gesamten Systems zusammenzuschließen, und die Implementierungscodierung wird an Senior -Ingenieure und Junior -Ingenieure entsprechend der Schwierigkeit übergeben. Wie wäre es damit, haben Sie den Vorlagenmethodenmodus verwendet?
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.
Hakenmethode: Deklariert und implementiert von abstrakten Klassen. 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 und anwendbare Szenarien der Vorlagenmethode
Leicht zu erweitern. Im Allgemeinen ist die Vorlagenmethode in einer abstrakten Klasse ein Teil, der nicht leicht zu ändern ist, während die abstrakte Methode ein Teil ist, der sich leicht umgekehrt zu ändern ist. Durch das Hinzufügen der Implementierungsklasse ist es daher im Allgemeinen einfach, die Funktion zu erweitern, die dem Prinzip des Öffnens und Schließens entspricht.
Leicht zu pflegen. Für den Vorlagenmethodenmodus wird genau das, was ihre Hauptlogik der Template -Methode verwendet. Wenn die Vorlagenmethode nicht verwendet wird, ist es sehr unpraktisch, den gleichen Code in einem Chaos zu verwalten.
Flexibler. Da es Hakenmethoden gibt, kann die Implementierung von Unterklassen auch den Betrieb der Hauptlogik in der übergeordneten Klasse beeinflussen. Wenn sie jedoch flexibel sind, weil Unterklassen die Elternklasse beeinflussen, bringt das Verstoß gegen das Richter -Ersatzprinzip auch Risiken für das Programm ein. Dies stellt höhere Anforderungen an das Design abstrakter Klassen.
Wenn mehrere Unterklassen dieselbe Methode haben und die Methoden logischerweise gleich sind, können Sie das Muster der Vorlagenmethode verwenden. Dieser Modus eignet sich auch für die Verwendung des Programms, wenn der Hauptgerüst des Programms gleich ist und die Details unterschiedlich sind.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.