Vorlage für das Entwurfsmuster Methode in Java

Template Method ist ein Verhaltensdesignmuster. Das Template Method Designmuster wird verwendet, um eine Methodenstub zu erstellen und einige der Implementierungsschritte an die Unterklassen zu verweisen.

Template Method Designmuster

Die Template-Methode definiert die Schritte zur Ausführung eines Algorithmus und kann eine Standardimplementierung bereitstellen, die für alle oder einige der Unterklassen gemeinsam sein könnte. Lassen Sie uns dieses Muster anhand eines Beispiels verstehen, angenommen wir möchten einen Algorithmus zum Erstellen eines Hauses bereitstellen. Die Schritte, die zum Erstellen eines Hauses durchgeführt werden müssen, sind – das Bauen von Fundamenten, das Bauen von Säulen, das Bauen von Wänden und Fenstern. Der wichtige Punkt ist, dass wir die Reihenfolge der Ausführung nicht ändern können, da wir die Fenster nicht vor dem Bau des Fundaments bauen können. In diesem Fall können wir eine Template-Methode erstellen, die verschiedene Methoden zum Erstellen des Hauses verwendet. Nun ist das Erstellen eines Fundaments für ein Haus für alle Arten von Häusern gleich, ob es sich um ein Holzhaus oder ein Glashaus handelt. Daher können wir hierfür eine Basisimplementierung bereitstellen. Wenn Unterklassen diese Methode überschreiben möchten, können sie dies tun, aber meistens ist es für alle Arten von Häusern gleich. Um sicherzustellen, dass Unterklassen die Template-Methode nicht überschreiben, sollten wir sie als endgültig deklarieren.

Abstrakte Klasse der Template-Methode

Da einige der Methoden von Unterklassen implementiert werden sollen, müssen wir unsere Basisklasse als abstrakte Klasse definieren. HouseTemplate.java

package com.journaldev.design.template;

public abstract class HouseTemplate {

	//Template-Methode, final, damit Unterklassen sie nicht überschreiben können
	public final void buildHouse(){
		buildFoundation();
		buildPillars();
		buildWalls();
		buildWindows();
		System.out.println("House is built.");
	}

	//Standardimplementierung
	private void buildWindows() {
		System.out.println("Building Glass Windows");
	}

	//Methoden, die von Unterklassen implementiert werden müssen
	public abstract void buildWalls();
	public abstract void buildPillars();

	private void buildFoundation() {
		System.out.println("Building foundation with cement,iron rods and sand");
	}
}

buildHouse() ist die Template-Methode und definiert die Reihenfolge der Ausführung für mehrere Schritte.

Konkrete Klassen der Template-Methode

Wir können verschiedene Arten von Häusern haben, wie z.B. ein Holzhaus und ein Glashaus. WoodenHouse.java

package com.journaldev.design.template;

public class WoodenHouse extends HouseTemplate {

	@Override
	public void buildWalls() {
		System.out.println("Building Wooden Walls");
	}

	@Override
	public void buildPillars() {
		System.out.println("Building Pillars with Wood coating");
	}

}

Wir könnten auch andere Methoden überschrieben haben, aber aus Gründen der Einfachheit tue ich das nicht. GlassHouse.java

package com.journaldev.design.template;

public class GlassHouse extends HouseTemplate {

	@Override
	public void buildWalls() {
		System.out.println("Building Glass Walls");
	}

	@Override
	public void buildPillars() {
		System.out.println("Building Pillars with glass coating");
	}

}

Client des Template-Methode-Entwurfsmusters

Lassen Sie uns unser Beispiel für das Template-Methode-Muster mit einem Testprogramm testen. HousingClient.java

package com.journaldev.design.template;

public class HousingClient {

	public static void main(String[] args) {
		
		HouseTemplate houseType = new WoodenHouse();
		
		//Verwendung der Template-Methode
		houseType.buildHouse();
		System.out.println("************");
		
		houseType = new GlassHouse();
		
		houseType.buildHouse();
	}

}

Beachten Sie, dass der Client die Vorlagenmethode der Basisklasse aufruft und je nach Implementierung verschiedener Schritte einige Methoden der Basisklasse und einige der Unterklasse verwendet. Die Ausgabe des obigen Programms ist:

Building foundation with cement,iron rods and sand
Building Pillars with Wood coating
Building Wooden Walls
Building Glass Windows
House is built.
************
Building foundation with cement,iron rods and sand
Building Pillars with glass coating
Building Glass Walls
Building Glass Windows
House is built.

Klassendiagramm der Vorlagenmethode

Vorlagenmethode-Entwurfsmuster in JDK

  • Alle nicht-abstrakten Methoden von java.io.InputStream, java.io.OutputStream, java.io.Reader und java.io.Writer.
  • Alle nicht-abstrakten Methoden von java.util.AbstractList, java.util.AbstractSet und java.util.AbstractMap.

Wichtige Punkte des Vorlagenmethoden-Entwurfsmusters

  1. Die Vorlagenmethode sollte aus bestimmten Schritten bestehen, deren Reihenfolge festgelegt ist, und für einige der Methoden unterscheidet sich die Implementierung von Basisklasse zu Unterklasse. Die Vorlagenmethode sollte final sein.
  2. Die meisten Male rufen Unterklassen Methoden von der Superklasse auf, aber im Vorlagenmuster ruft die Vorlagenmethode der Superklasse Methoden von den Unterklassen auf, das ist bekannt als Hollywood-Prinzip – „ruf uns nicht an, wir rufen dich an.“
  3. Methoden in der Basisklasse mit Standardimplementierung werden als Hooks bezeichnet und sollen von Unterklassen überschrieben werden. Wenn Sie möchten, dass einige der Methoden nicht überschrieben werden, können Sie sie final machen, zum Beispiel können wir in unserem Fall die Methode buildFoundation() final machen, weil wir nicht möchten, dass Unterklassen sie überschreiben.

Das ist alles zum Vorlagenmethoden-Entwurfsmuster in Java, ich hoffe, es hat Ihnen gefallen.

Source:
https://www.digitalocean.com/community/tutorials/template-method-design-pattern-in-java