Ein Entwurfsmuster, in dem eine Oberklasse das Verarbeitungsframework definiert und Unterklassen den spezifischen Inhalt definieren, wird als Vorlagenmethode bezeichnet. Es müssen zwei Rollen angezeigt werden, die Rolle der abstrakten Klasse und die Rolle der konkreten Klasse.
Die AbstractClass-Rolle implementiert die Vorlagenmethode. Deklarieren Sie außerdem die in der Vorlagenmethode verwendete abstrakte Methode.
package templateMethod;
public abstract class AbstractDisplay {
public abstract void open();
public abstract void print();
public abstract void close();
public final void display() {
open();
for(int i = 0; i < 5; i++) {
print();
}
close();
}
}
Implementieren Sie konkret die abstrakte Methode, die durch die Rolle von AbstractClass definiert ist. Die hier implementierte Methode wird von der Template-Methode aufgerufen, die die Rolle von Abstract spielt.
package templateMethod;
public class CharDisplay extends AbstractDisplay {
private char ch;
public CharDisplay(char ch) {
this.ch = ch;
}
@Override
public void open() {
System.out.print("<<");
}
@Override
public void print() {
System.out.print(ch);
}
@Override
public void close() {
System.out.println(">>");
}
}
package templateMethod;
public class StringDisplay extends AbstractDisplay{
private String string;
private int width;
public StringDisplay(String string) {
this.string = string;
this.width = string.getBytes().length;
}
@Override
public void open() {
printLine();
}
@Override
public void print() {
System.out.println("|" + string + "|");
}
@Override
public void close() {
printLine();
}
private void printLine() {
System.out.print("+");
for (int i = 0; i < width; i++) {
System.out.print("-");
}
System.out.println("+");
}
}
package templateMethod;
public class Main {
public static void main(String[] args) {
AbstractDisplay cd = new CharDisplay('c');
cd.display();
AbstractDisplay sd = new StringDisplay("Hello,World");
sd.display();
}
}
//Ergebnis
//<<ccccc>>
//+-----------+
//|Hello,World|
//|Hello,World|
//|Hello,World|
//|Hello,World|
//|Hello,World|
//+-----------+
Das Muster der Vorlagenmethode kann zur Standardisierung der Logik verwendet werden. In diesem Beispiel wird der Algorithmus in der Vorlagenmethode der Superklasse beschrieben, sodass es nicht erforderlich ist, den Algorithmus einzeln auf der Unterklassenseite zu beschreiben.
Wenn Sie mehrere ConcreteClasses durch Kopieren ohne Verwendung der Vorlagenmethode erstellen Wenn Sie später einen Fehler in der Betonklasse finden, müssen Sie den Fehler in allen Betonklassen beheben. Wenn Sie das Muster der Vorlagenmethode verwenden, auch wenn Sie einen Fehler in der Vorlagenmethode finden Sie müssen lediglich die Vorlagenmethode ändern.
Recommended Posts