Heim >Java >javaLernprogramm >Eine beispielhafte Einführung in das Vorlagenmethodenmuster in Java-Entwurfsmustern

Eine beispielhafte Einführung in das Vorlagenmethodenmuster in Java-Entwurfsmustern

黄舟
黄舟Original
2017-08-11 09:59:031335Durchsuche

In diesem Artikel wird hauptsächlich das Vorlagenmethodenmuster von Designmustern vorgestellt. Der Herausgeber findet es recht gut. Ich werde es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf.

Definition: Definieren Sie den Rahmen eines Algorithmus im Betrieb und verschieben Sie einige Schritte auf Unterklassen, damit Unterklassen die Struktur des Algorithmus nicht ändern können. Das heißt, einige spezifische Schritte im Algorithmus können neu definiert werden.

Typ: Verhaltensklassenmuster

Klassendiagramm:

Tatsächlich Die Template-Methode ist ein häufig verwendetes Muster in der Programmierung. Schauen wir uns zunächst ein Beispiel an. Eines Tages bekam Programmierer A die Aufgabe, bei einem gegebenen Array von ganzen Zahlen die Zahlen im Array von klein nach groß zu sortieren und dann die sortierten Ergebnisse auszudrucken. Nach der Analyse lässt sich diese Aufgabe grob in zwei Teile unterteilen: Sortieren und Drucken. Die Druckfunktion ist einfach zu implementieren, das Sortieren ist jedoch etwas mühsam. Aber A hat eine Möglichkeit, zuerst die Druckfunktion abzuschließen und dann jemand anderen zu finden, der die Sortierfunktion übernimmt.


abstract class AbstractSort { 
   
  /** 
   * 将数组array由小到大排序 
   * @param array 
   */ 
  protected abstract void sort(int[] array); 
   
  public void showSortResult(int[] array){ 
    this.sort(array); 
    System.out.print("排序结果:"); 
    for (int i = 0; i < array.length; i++){ 
      System.out.printf("%3s", array[i]); 
    } 
  } 
}

Nachdem er mit dem Schreiben fertig war, ging A zu Kollege B, der gerade seinen Abschluss gemacht hatte und vor nicht allzu langer Zeit in den Job eingestiegen war, und sagte: Es gibt eine Aufgabe . Ich habe die Hauptlogik bereits geschrieben. Sie können den Rest der Logik implementieren. Also gab ich B die AbstractSort-Klasse und bat B, die Implementierung zu schreiben. B nahm es und warf einen Blick darauf. Es dauerte 10 Minuten, bis es fertig war. Der Code lautete wie folgt:


Nach dem Schreiben Geben Sie es A. A wird es ausführen:
class ConcreteSort extends AbstractSort { 
 
  @Override 
  protected void sort(int[] array){ 
    for(int i=0; i<array.length-1; i++){ 
      selectSort(array, i); 
    } 
  } 
   
  private void selectSort(int[] array, int index) { 
    int MinValue = 32767; // 最小值变量 
    int indexMin = 0; // 最小值索引变量 
    int Temp; // 暂存变量 
    for (int i = index; i < array.length; i++) { 
      if (array[i] < MinValue){ // 找到最小值 
        MinValue = array[i]; // 储存最小值 
        indexMin = i;  
      } 
    } 
    Temp = array[index]; // 交换两数值 
    array[index] = array[indexMin]; 
    array[indexMin] = Temp; 
  } 
}



Laufendes Ergebnis:
public class Client { 
  public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 预设数据数组 
  public static void main(String[] args){ 
    AbstractSort s = new ConcreteSort(); 
    sshowSortResult(a); 
  } 
}


Ergebnis sortieren : 0 1 3 4 5 7 9 10 12 32


läuft normal. Okay, Mission erfüllt. Ja, das ist das Muster der Vorlagenmethode. Die meisten Absolventen, die gerade erst ins Berufsleben eingetreten sind, sollten eine ähnliche Erfahrung wie B gemacht haben. Für eine komplexe Aufgabe schreiben die besten Leute im Unternehmen die Hauptlogik, schreiben dann die scheinbar einfachen Methoden in abstrakte Methoden und überlassen die Entwicklung anderen Kollegen. Diese Arbeitsteilung wird häufig in Unternehmen mit einem offensichtlichen Umfang an Programmierpersonal angewendet. Wenn ein Projektteam beispielsweise aus einem Architekten, einem leitenden Ingenieur und einem Junioringenieur besteht, verwendet der Architekt im Allgemeinen eine große Anzahl von Schnittstellen und abstrakten Klassen, um die Logik des gesamten Systems aneinanderzureihen, und die Implementierungscodierung wird an ihn übergeben Der leitende Ingenieur bzw. der Junior-Ingenieur erledigen dies entsprechend der Schwierigkeit. Wie wäre es damit, haben Sie jemals das Muster der Vorlagenmethode verwendet?


Die Struktur des Template-Methodenmusters


Das Template-Methodenmuster besteht aus einer abstrakten Klasse und einer (oder einer Gruppe von) Implementierungsklassen durch eine Vererbungsstruktur. Es gibt drei Arten von Methoden in abstrakten Klassen:

    Abstrakte Methoden: Die übergeordnete Klasse deklariert sie nur, implementiert sie jedoch nicht. Stattdessen definiert sie die Spezifikationen und implementiert sie sie durch ihre Unterklassen.
  • Template-Methoden: von abstrakten Klassen deklariert und implementiert. Im Allgemeinen rufen Vorlagenmethoden abstrakte Methoden auf, um die wichtigsten logischen Funktionen abzuschließen. Die meisten Vorlagenmethoden sind als endgültige Typen definiert, was darauf hinweist, dass die wichtigsten logischen Funktionen in Unterklassen nicht überschrieben werden können.
  • Hook-Methode: von einer abstrakten Klasse deklariert und implementiert. Unterklassen können jedoch erweitert werden, und Unterklassen können die Logik von Vorlagenmethoden durch Erweitern von Hook-Methoden beeinflussen.
  • Die Aufgabe abstrakter Klassen besteht darin, einen logischen Rahmen aufzubauen, der normalerweise von erfahrenem Personal geschrieben wird, da die Qualität abstrakter Klassen direkt die Stabilität des Programms bestimmt.

  • Implementierungsklassen werden zur Implementierung von Details verwendet. Die Vorlagenmethode in der abstrakten Klasse vervollständigt die Geschäftslogik durch Implementierung der Klassenerweiterungsmethode. Solange die Erweiterungsmethode in der Implementierungsklasse den Komponententest besteht und die Vorlagenmethode korrekt ist, treten im Allgemeinen keine größeren Fehler in der Gesamtfunktion auf.


Vorteile und anwendbare Szenarien der Vorlagenmethode


Einfach zu erweitern. Im Allgemeinen ist die Vorlagenmethode in einer abstrakten Klasse der Teil, der im Nachhinein nicht einfach geändert werden kann, während die abstrakte Methode der Teil ist, der im Nachhinein leicht geändert werden kann. Daher ist es im Allgemeinen einfach, die Funktion durch Hinzufügen von Implementierungsklassen zu erweitern , was dem Öffnungs- und Schließprinzip entspricht.


Einfach zu pflegen. Für das Vorlagenmethodenmuster wird die Vorlagenmethode gerade deshalb verwendet, weil ihre Hauptlogik dieselbe ist. Wenn die Vorlagenmethode nicht verwendet wird, kann derselbe Code auf verschiedene Klassen verteilt werden, was sehr umständlich zu verwalten ist. .


Flexibler. Aufgrund der Hook-Methode kann die Implementierung der Unterklasse auch die Funktionsweise der Hauptlogik in der übergeordneten Klasse beeinflussen. Obwohl die Unterklasse flexibel ist und Auswirkungen auf die übergeordnete Klasse hat, verstößt sie gegen das Liskov-Substitutionsprinzip und birgt auch Risiken für das Programm. Dies stellt höhere Anforderungen an die Gestaltung abstrakter Klassen.


Wenn mehrere Unterklassen dieselben Methoden haben und die Logik dieser Methoden dieselbe ist, können Sie die Verwendung des Vorlagenmethodenmusters in Betracht ziehen. Dieser Modus eignet sich auch besser, wenn der Hauptrahmen des Programms derselbe ist, die Details jedoch unterschiedlich sind.

Das obige ist der detaillierte Inhalt vonEine beispielhafte Einführung in das Vorlagenmethodenmuster in Java-Entwurfsmustern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn