[GO] [Detaillierte Erklärung] Muster der Vorlagenmethode

Einführung

Dieser Artikel beschreibt das Muster der Vorlagenmethode. Sie sollten auf jeden Fall den Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle verstehen. Selbst wenn Sie diesen Schritt überspringen und das Entwurfsmuster eingeben, können Sie es nicht beherrschen. Hier Ich denke, der Artikel wird sehr hilfreich sein, also schauen Sie bitte.

Was ist eine Vorlage?

Auf Japanisch ist es ** Typ **. Ich denke, dass die Arbeit verbessert wird, indem beim Erstellen einer E-Mail bis zu einem gewissen Grad eine ** Vorlage ** erstellt wird. Gleiches gilt für Programme.

Vorlagenmethode Musterkonzept

Eine Methode zum Extrahieren gemeinsamer Teile der Verarbeitung in eine abstrakte Klasse und zum Implementieren einer eindeutigen Verarbeitung in einer konkreten Klasse. Einfacher ausgedrückt kann es verwendet werden, wenn Sie eine ähnliche Ablaufverarbeitung verwenden möchten. Ich denke, dieser * Fluss * ist wichtig. Anstatt nur die Verarbeitung, die gemeinsam genutzt werden kann, in die abstrakte Klasse zu bringen Der beste Teil dieses Musters besteht darin, den ** Verarbeitungsfluss ** als Vorlage (Typ) in eine abstrakte Klasse zu extrahieren.

Wann kann ich es benutzen?

Ich denke, Sie können dieses Muster in den folgenden Fällen verwenden. ** Wenn der Verarbeitungsablauf mehrerer konkreter Klassen ähnlich ist, z. B. "Vorverarbeitung, Hauptverarbeitung, Nachbearbeitung" **

Es ist schwierig zu bestimmen, wann dies verwendet werden kann, und es ist der wichtigste Teil, so dass das Programm, das Sie einmal geschrieben haben, Ich denke, Sie sollten darüber nachdenken, indem Sie sich den veröffentlichten Quellcode ansehen.

Bild zur Verwendung des Vorlagenmethodenmusters

Verwenden wir das Muster der Vorlagenmethode als Beispiel für einen Tag für Schüler und einen Tag für berufstätige Erwachsene.

Schüler Gesellschaft
Aufstehen Aufstehen ← Gleiches Verhalten
Schlafen Sie zweimal Vorbereitung ← Unterschiedliches Verhalten
abspielen Arbeitsplätze ← Unterschiedliches Verhalten
Ins Bett gehen Ins Bett gehen ← Gleiches Verhalten

Ich schrieb die täglichen Verhaltensmuster (Typen) von Studenten und Arbeitern. Sie können das Muster der Vorlagenmethode verwenden, wenn die Muster (Typen) ähnlich sind! Wenn Sie den Fluss des menschlichen Lebens in eine abstrakte Klasse schreiben (gemeinsame Aktionen implementieren) und in jeder konkreten Klasse unterschiedliche Aktionen implementieren, ist dies einfach, aber das Muster der Vorlagenmethode ist abgeschlossen.

Beispielprogramm

Lassen Sie es uns anhand des oben gezeigten Beispiels implementieren.

Implementieren Sie den Fluss des menschlichen Lebens mit einer abstrakten Klasse. Aufwachen und ins Bett gehen sind die gleichen Aktionen, daher werden wir sie in einer abstrakten Klasse implementieren.

Human.java


public abstract class Human {
	public void startDay(){
		getUp();
		preAction();
		mainAction();
		sleep();
	}
	
	protected abstract void mainAction();

	protected abstract void preAction();

	private void getUp(){
		System.out.println("Aufstehen");
	}
	private void sleep(){
		System.out.println("Ins Bett gehen");
	}
}

Wir werden in dieser konkreten Klasse schülerspezifischen Doppelschlaf implementieren und spielen.

Student.java


public class Student extends Human{
	@Override
	protected void mainAction() {
		System.out.println("Schlafen Sie zweimal");
	}

	@Override
	protected void preAction() {
		System.out.println("abspielen");
	}
}

Diese konkrete Klasse implementiert die Vorbereitung und Arbeit, die den Arbeitern eigen sind.

WorkingAdult.java


public class WorkingAdult extends Human{
	@Override
	protected void mainAction() {
		System.out.println("Vorbereitung");
	}

	@Override
	protected void preAction() {
		System.out.println("Arbeitsplätze");
	}
}

Erstellen Sie schließlich eine Klasse, die diese oben genannten Klassen aufruft. Beginnen Sie den Tag einfach mit neuen Studenten und Arbeitern

Main.java


public class Main {
	public static void main(String[] arg){
		Human student = new Student();
		Human worker = new WorkingAdult();
		
		System.out.println("**Schüler**");
		student.startDay();
		
		System.out.println("**Gesellschaft**");
		worker.startDay();
	}
}

/*
**Schüler**
Aufstehen
abspielen
Schlafen Sie zweimal
Ins Bett gehen
**Gesellschaft**
Aufstehen
Arbeitsplätze
Vorbereitung
Ins Bett gehen
*/

Wie war es? Es war unerwartet einfach! Vielmehr habe ich nur die gemeinsame Verarbeitung in eine abstrakte Klasse gebracht !? ** Ich möchte, dass Sie hier verstehen, dass der Verarbeitungsablauf in die abstrakte Klasse gebracht wird. ** ** **

Komponierte Methode Kombination mit Muster

Von hier aus ist es etwas fortgeschritten.

Es gibt ein Muster für eine zusammengesetzte Methode, das jedoch nur die Methode und extrahiert Verbessern wir die Lesbarkeit, bis Sie den Prozess lesen können! !! Die Technik. Kombinieren dieses Musters der zusammengesetzten Methode mit dem Muster der Vorlagenmethode Was nützt es?

Beispielsweise ist die Verarbeitung ähnlich, unterscheidet sich jedoch geringfügig und kann nicht gemeinsam genutzt werden. .. .. Wenn das Muster der Vorlagenmethode nicht verwendet werden kann, ist es daher möglich, diese Methode zu kombinieren.

Nehmen wir als Beispiel den Prozess der Zubereitung von Kaffee und Tee.

Klasse, um Kaffee zu machen

Coffee.java


public class Coffee {
	public void makeCoffee(){
		createHotWater();
		System.out.println("Kaffeepulver hinzufügen");
		waiting();
	}

	private void createHotWater() {
		System.out.println("Machen Sie kochendes Wasser");
	}
	
	private void waiting(){
		System.out.println("warten");
	}
}

Klasse, um Tee zu machen

Tea.java


public class Tea {
	public void makeCoffee(){
		createHotWater();
		System.out.println("Fügen Sie Teepulver hinzu");
		waiting();
	}

	private void createHotWater() {
		System.out.println("Machen Sie kochendes Wasser");
	}
	
	private void waiting(){
		System.out.println("warten");
	}
}

Oh! !! !! "Machen Sie kochendes Wasser, machen Sie Kaffee oder Tee, warten Sie" Es ist ein ähnlicher Prozess! !! Verwenden wir das Muster der Vorlagenmethode! !! !! !! Ich möchte, dass du es ausprobierst. Sie können es bemerken.

Die nicht methodisierten Teile "Geben Sie das Copipulver ein" und "Geben Sie das Teepulver ein" bleiben unverändert Kann nicht standardisiert werden. Hier kommt das Muster der komponierten Methode!

Schreiben wir die Kaffeeklasse wie folgt um. Extrahieren Sie einfach einen Code in die putPowder-Methode

Coffee.java


public class Coffee {
	public void makeCoffee(){
		createHotWater();
		putPowder();
		waiting();
	}

	protected void putPowder() {
		System.out.println("Kaffeepulver hinzufügen");
	}

	private void createHotWater() {
		System.out.println("Machen Sie kochendes Wasser");
	}
	
	private void waiting(){
		System.out.println("warten");
	}
}

Schreiben wir die Teeklasse wie folgt um. Extrahieren Sie einfach einen Code in die putPowder-Methode

Tea.java


public class Tea {
	public void makeCoffee(){
		createHotWater();
		putPowder();
		waiting();
	}

	protected void putPowder() {
		System.out.println("Kaffeepulver hinzufügen");
	}

	private void createHotWater() {
		System.out.println("Machen Sie kochendes Wasser");
	}
	
	private void waiting(){
		System.out.println("warten");
	}
}

Zu diesem Zeitpunkt müssen Sie lediglich die Methode in eine abstrakte Methode umwandeln und die spezifische Verarbeitung in einer konkreten Klasse implementieren.

Zusammenfassung

Haben Sie den Zweck des Musters der Vorlagenmethode verstanden? Es ist sehr einfach zu verwenden, wenn Sie einen neuen erstellen, aber wenn Sie vorhandenen Code umgestalten. Es ist unerwartet schwierig festzustellen, dass "irgendwo geteilt werden kann".

In abstrakten Klassen ist es außerdem besser, möglichst viele abstrakte Methodennamen zu verwenden. Wenn Sie einen eindeutigen Namen schreiben, wenn die Anzahl der konkreten Klassen stetig zunimmt, Der Verarbeitungsinhalt und der Methodenname stimmen nicht überein.

Recommended Posts

[Detaillierte Erklärung] Muster der Vorlagenmethode
Entwurfsmuster # Template-Methode
Muster der Vorlagenmethode in Java
Python Design Pattern - Template-Methode
Entwurfsmuster #Factory-Methode
Lernen Sie das Entwurfsmuster "Vorlagenmethode" in Python
[Viererbande] Design Pattern Learning - Template-Methode
Vorlage