Heim >Java >javaLernprogramm >Detaillierte Erläuterung des Vorlagenmethodenmusters des Java-Entwurfsmusters
In diesem Artikel werden hauptsächlich die relevanten Informationen zum Vorlagenmethodenmuster von Java im Detail vorgestellt. Interessierte Freunde können sich auf
1 beziehen. Was ist das Vorlagenmethodenmuster?
2. Vergleich der Modi
public class TestPaperA { //试卷第一题 public void testQuestion1(){ System.out.println("小龙女是杨过的什么亲戚?() A.小姨妈 B.大姨妈 C.姑妈 D.舅妈"); System.out.println("答案:C"); } //试卷第二题 public void testQuestion2(){ System.out.println("全真教的首任掌门是谁?A.周伯通 B.欧阳锋 C.王重阳 D.西门吹牛"); System.out.println("答案:C"); } //试卷第三题 public void testQuestion3(){ System.out.println("《天龙八部》中被封为南院大王的大侠是谁?A.段誉 B.乔峰 C.慕容复 D.段智兴"); System.out.println("答案:B"); } }Prüfungsarbeit von Schüler B kopiert
public class TestPaperB { //试卷第一题 public void testQuestion1(){ System.out.println("小龙女是杨过的什么亲戚?() A.小姨妈 B.大姨妈 C.姑妈 D.舅妈"); System.out.println("答案:A"); } //试卷第二题 public void testQuestion2(){ System.out.println("全真教的首任掌门是谁?A.周伯通 B.欧阳锋 C.王重阳 D.西门吹牛"); System.out.println("答案:C"); } //试卷第三题 public void testQuestion3(){ System.out.println("《天龙八部》中被封为南院大王的大侠是谁?A.段誉 B.乔峰 C.慕容复 D.段智兴"); System.out.println("答案:D"); } }Kundencode
public class ShowAnswer { public static void main(String[] args) { System.out.println("学生甲的试卷"); TestPaperA stuA = new TestPaperA(); stuA.testQuestion1(); stuA.testQuestion2(); stuA.testQuestion3(); System.out.println("学生乙的试卷"); TestPaperB stuB = new TestPaperB(); stuB.testQuestion1(); stuB.testQuestion2(); stuB.testQuestion3(); } }Es ist einfach Um das Obige zu finden, gibt es viele Duplikate in den von den beiden Schülern kopierten Prüfungsarbeiten, z. B. die Fragen der Prüfungsarbeit und die Methode zur Ausgabe der Antworten. Diese sind alle in der Prüfungsarbeitskategorie jedes Schülers gemischt, was nicht förderlich ist Zur Wartung oder zum Durchsuchen werfen wir einen Blick auf die Vorlage. 2. Vorlagenmethodenmodus
public abstract class TestPaper { //试卷第一题 public void testQuestion1(){ System.out.println("小龙女是杨过的什么亲戚?() A.小姨妈 B.大姨妈 C.姑妈 D.舅妈"); System.out.println("答案:" + answer1()); } //试卷第二题 public void testQuestion2(){ System.out.println("全真教的首任掌门是谁?A.周伯通 B.欧阳锋 C.王重阳 D.西门吹牛"); System.out.println("答案:" + answer2()); } //试卷第三题 public void testQuestion3(){ System.out.println("《天龙八部》中被封为南院大王的大侠是谁?A.段誉 B.乔峰 C.慕容复 D.段智兴"); System.out.println("答案:" + answer3()); } //这三个钩子方法是给每个子类去实现,并返回答案的 public abstract String answer1(); public abstract String answer2(); public abstract String answer3(); //模板方法,考试的过程,定义基本的考试过程,子类回调 public void exam(){ testQuestion1(); testQuestion2(); testQuestion3(); } }Sehen wir uns zunächst die Prüfungssituation des ersten Schülers an
public class TestPaperA extends TestPaper{ @Override public String answer1() { return "A"; } @Override public String answer2() { return "B"; } @Override public String answer3() { return "D"; } }Die Prüfungsaufgaben anderer Schüler haben möglicherweise unterschiedliche Antworten, aber der grundlegende Antwortprozess ist derselbe Es gibt keinen Unterschied. Ich habe es noch einmal geschrieben. Schauen wir uns den Client-Code an.
public class ShowAnswer { public static void main(String[] args) { TestPaper testPaper = new TestPaperA(); testPaper.exam(); } }Es ist ersichtlich, dass auch der Client-Code stark vereinfacht wurde. Dadurch ist die Logik klar und einfach zu pflegen. Die Vorteile liegen auf der Hand.
Welcher Verwandter von Yang Guo ist Xiao Longnu? () A. Kleine Tante B. Großtante C. Tante D. Tante Antwort: A
Wer war das erste Oberhaupt der Quanzhen-Sekte? A. Zhou Botong B. Ouyang Feng C. Wang Chongyang D. Ximen Brag
Antwort: B
Wer ist der Held, der in „Dragon“ als König des Südcampus bezeichnet wird? A. Duan Yu B. Qiao Feng C. Murong Fu D. Duan Zhixing
Antwort: D
public abstract class AbstractClass { //一些抽象行为,可以理解为重复不变的方法,提取到抽象类 public abstract void primitiveOperation1(); public abstract void primitiveOperation2(); //模板方法,给出了具体逻辑的骨架,而逻辑的组成是一些相应的抽象操作,他们都推迟到子类实现 public void templateMothed(){ primitiveOperation1(); primitiveOperation2(); } }ConcreteClass, das eine oder mehrere abstrakte Methoden implementiert, die von der übergeordneten Klasse definiert werden. Jede AbstractClass kann über eine oder mehrere entsprechende ConcreteClass verfügen, und jede ConcreteClass kann unterschiedliche Implementierungen dieser abstrakten Methoden (dh die Schritte des Grundgerüsts) bereitstellen, sodass die erhaltenen Implementierungen unterschiedlich sind.
public class ConcreteClassA extends AbstractClass{ @Override public void primitiveOperation1() { System.out.println("子类A的操作1"); } @Override public void primitiveOperation2() { System.out.println("子类A的操作2"); } }
public class ConcreteClassB extends AbstractClass{ @Override public void primitiveOperation1() { System.out.println("子类B的操作1"); } @Override public void primitiveOperation2() { System.out.println("子类B的操作2"); } }Zwei spezifische Implementierungen sind oben definiert. Weitere Implementierungen sind tatsächlich gleich, daher werde ich hier nicht auf Details eingehen. Schauen wir uns den Client-Code an
public class Show { public static void main(String[] args) { AbstractClass c; c = new ConcreteClassA(); c.templateMothed(); c = new ConcreteClassB(); c.templateMothed(); } }Geben Sie Folgendes ein
Operation 1 der Unterklasse AOperation 2 der Unterklasse A
Operation 1 der Unterklasse B
Operation 2 der Unterklasse B
3 >
Das Vorlagenmethodenmuster besteht darin, sich wiederholenden und unveränderten Code in eine abstrakte Klasse zu extrahieren. Wenn wir einen Prozess oder eine Reihe von Schritten abschließen möchten, die auf einer bestimmten Detailebene konsistent sind, die Implementierung einzelner Schritte auf einer detaillierteren Ebene jedoch unterschiedlich sein kann, ziehen wir normalerweise die Verwendung des Vorlagenmethodenmusters in Betracht, um damit umzugehen.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Vorlagenmethodenmusters des Java-Entwurfsmusters. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!