Implementieren des Vorlagenmethodenmusters in Java

1. Übersicht

In diesem kurzen Tutorial erfahren Sie, wie Sie das Muster der Vorlagenmethode nutzen können - eines der beliebtesten GoF-Muster.

Es erleichtert die Implementierung komplexer Algorithmen, indem die Logik in einer einzigen Methode gekapselt wird.

2. Implementierung

Um zu demonstrieren, wie das Muster der Vorlagenmethode funktioniert, erstellen wir ein einfaches Beispiel, das den Aufbau einer Computerstation darstellt.

In Anbetracht der Musterdefinition wird die Struktur des Algorithmus in einer Basisklasse definiert, die die template build () -Methode definiert :

public abstract class ComputerBuilder { // ... public final Computer buildComputer() { addMotherboard(); setupMotherboard(); addProcessor(); return new Computer(computerParts); } public abstract void addMotherboard(); public abstract void setupMotherboard(); public abstract void addProcessor(); // ... }

Die ComputerBuilder- Klasse ist dafür verantwortlich, die zum Erstellen eines Computers erforderlichen Schritte zu skizzieren, indem Methoden zum Hinzufügen und Einrichten verschiedener Komponenten wie Motherboards und Prozessoren deklariert werden .

Hier ist die build () -Methode die Template-Methode , die Schritte des Algorithmus zum Zusammensetzen der Computerteile definiert und vollständig initialisierte Computerinstanzen zurückgibt .

Beachten Sie, dass es als endgültig deklariert wurde , um zu verhindern, dass es überschrieben wird.

3. In Aktion

Versuchen wir, die bereits festgelegte Basisklasse zu verwenden, indem wir zwei Unterklassen erstellen. Einer, der einen "Standard" -Computer baut, und der andere, der einen "High-End" -Computer baut:

public class StandardComputerBuilder extends ComputerBuilder { @Override public void addMotherboard() { computerParts.put("Motherboard", "Standard Motherboard"); } @Override public void setupMotherboard() { motherboardSetupStatus.add( "Screwing the standard motherboard to the case."); motherboardSetupStatus.add( "Pluging in the power supply connectors."); motherboardSetupStatus.forEach( step -> System.out.println(step)); } @Override public void addProcessor() { computerParts.put("Processor", "Standard Processor"); } }

Und hier ist die HighEndComputerBuilder- Variante:

public class HighEndComputerBuilder extends ComputerBuilder { @Override public void addMotherboard() { computerParts.put("Motherboard", "High-end Motherboard"); } @Override public void setupMotherboard() { motherboardSetupStatus.add( "Screwing the high-end motherboard to the case."); motherboardSetupStatus.add( "Pluging in the power supply connectors."); motherboardSetupStatus.forEach( step -> System.out.println(step)); } @Override public void addProcessor() { computerParts.put("Processor", "High-end Processor"); } }

Wie wir sehen können, mussten wir uns nicht um den gesamten Montageprozess kümmern, sondern nur um Implementierungen für separate Methoden.

Lassen Sie es uns jetzt in Aktion sehen:

new StandardComputerBuilder() .buildComputer(); .getComputerParts() .forEach((k, v) -> System.out.println("Part : " + k + " Value : " + v)); new HighEndComputerBuilder() .buildComputer(); .getComputerParts() .forEach((k, v) -> System.out.println("Part : " + k + " Value : " + v));

4. Vorlagenmethoden in Java Core Libraries

Dieses Muster wird in den Java-Kernbibliotheken häufig verwendet, beispielsweise von java.util.AbstractList oder java.util.AbstractSet.

Beispielsweise bietet Abstract List eine Skelettimplementierung der List- Schnittstelle.

Ein Beispiel für eine Vorlagenmethode kann die Methode addAll () sein , obwohl sie nicht explizit als final definiert ist :

public boolean addAll(int index, Collection c) { rangeCheckForAdd(index); boolean modified = false; for (E e : c) { add(index++, e); modified = true; } return modified; }

Benutzer müssen nur die add () -Methode implementieren :

public void add(int index, E element) { throw new UnsupportedOperationException(); }

Hier liegt es in der Verantwortung des Programmierers, eine Implementierung zum Hinzufügen eines Elements zur Liste am angegebenen Index (dem varianten Teil des Auflistungsalgorithmus) bereitzustellen.

5. Schlussfolgerung

In diesem Artikel haben wir das Muster der Vorlagenmethode und die Implementierung in Java gezeigt.

Das Muster der Vorlagenmethode fördert die Wiederverwendung und Entkopplung von Code, jedoch auf Kosten der Verwendung der Vererbung.

Wie immer sind alle in diesem Artikel gezeigten Codebeispiele auf GitHub verfügbar.