Template-Method Design-Vorlage in Java

Template Method ist ein verhaltensorientierte Design-Vorlage. Die Template Method Design-Vorlage in Java wird verwendet, um eine Methoden-Schablone zu erstellen und einige der Implementierungsschritte an die Unterklassen zu delegieren.

Template Method Design-Vorlage

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. Verstehen wir dieses Muster anhand eines Beispiels, nehmen wir an, wir möchten einen Algorithmus zum Bau eines Hauses bereitstellen. Die Schritte, die zum Bau eines Hauses durchgeführt werden müssen, sind – Fundament bauen, Säulen bauen, Wände und Fenster bauen. Der wichtige Punkt ist, dass wir die Reihenfolge der Ausführung nicht ändern können, weil wir keine Fenster bauen können, bevor das Fundament gebaut ist. In diesem Fall können wir eine Template-Methode erstellen, die verschiedene Methoden zum Bau des Hauses verwendet. Nun ist der Bau des Fundaments für ein Haus für alle Arten von Häusern gleich, sei es ein Holzhaus oder ein Glashaus. Wir können also eine Basisimplementierung dafür bereitstellen, wenn Unterklassen diese Methode überschreiben wollen, können sie das tun, aber meistens ist sie für alle Arten von Häusern gleich. Um sicherzustellen, dass Unterklassen die Template-Methode nicht überschreiben, sollten wir sie als final deklarieren.

Template Method Abstrakte Klasse

Da wir möchten, dass einige der Methoden von Unterklassen implementiert werden, müssen wir unsere Basisklasse als abstrakte Klasse machen. HouseTemplate.java

package com.journaldev.design.template;

public abstract class HouseTemplate {

	//template method, final so subclasses can't override
	public final void buildHouse(){
		buildFoundation();
		buildPillars();
		buildWalls();
		buildWindows();
		System.out.println("House is built.");
	}

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

	//methods to be implemented by subclasses
	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 die Durchführung mehrerer Schritte.

Template Method Konkrete Klassen

Wir können verschiedene Arten von Häusern haben, wie z.B. Holzhaus und 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 hätten auch andere Methoden überschreiben können, aber der Einfachheit halber mache 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");
	}

}

Template Method Design-Vorlage Client

Testen wir unser Template Method Musterbeispiel mit einem Testprogramm. HousingClient.java

package com.journaldev.design.template;

public class HousingClient {

	public static void main(String[] args) {
		
		HouseTemplate houseType = new WoodenHouse();
		
		//using template method
		houseType.buildHouse();
		System.out.println("************");
		
		houseType = new GlassHouse();
		
		houseType.buildHouse();
	}

}

Beachten Sie, dass der Client die Template-Methode der Basisklasse aufruft und je nach Implementierung der verschiedenen Schritte einige Methoden aus der Basisklasse und einige aus der Unterklasse verwendet. Die Ausgabe des oben genannten 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.

Template Method Design-Vorlage 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 zur Template Method Design-Vorlage

  1. Die Template-Methode sollte aus bestimmten Schritten bestehen, deren Reihenfolge festgelegt ist und bei einigen der Methoden die Implementierung von der Basisklasse zur Unterklasse variiert. Die Template-Methode sollte final sein.
  2. Meistens rufen Unterklassen Methoden von der Superklasse auf, aber im Template-Muster ruft die Template-Methode der Superklasse Methoden von den Unterklassen auf, dies ist bekannt als Hollywood-Prinzip – „Rufen Sie uns nicht an, wir rufen Sie 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 zur Template Method Design-Vorlage in Java, ich hoffe, es hat Ihnen gefallen.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: