一、 定义
模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
二、 结构图
三、 示例代码(考试场景为例,待补充)
package org.example.TemplateMethodModel;
public abstract class TemplateMethod {
//具体的算法到子类中实现
public abstract void TestQuestionA();
public abstract void TestQuestionB();
public abstract void TestQuestionC();
//隐藏实现过程,在子类中不可见
public final void ExTest(){
TestQuestionA();
TestQuestionB();
TestQuestionC();
System.out.println("make answers over");
}
}
package org.example.TemplateMethodModel;
public class StudentATemplate extends TemplateMethod {
String stuName="";
String stuId = "";
public StudentATemplate(String stuName,String stuId){
this.stuName = stuName;
this.stuId = stuId;
}
@Override
public void TestQuestionA() {
System.out.println("Id:" + stuId + "A:" + "abcdl");
}
@Override
public void TestQuestionB() {
System.out.println("Id:" + stuId + "B:" + "wqei");
}
@Override
public void TestQuestionC() {
System.out.println("Id:" + stuId + "C:" + "uiop");
}
}
package org.example.TemplateMethodModel;
public class StudentBTemplate extends TemplateMethod{
private String stuName="";
private String stuId="";
public StudentBTemplate(String stuName,String stuId){
this.stuName = stuName;
this.stuId = stuId;
}
@Override
public void TestQuestionA() {
System.out.println("Id:" + stuId + "A:" + "1234" );
}
@Override
public void TestQuestionB() {
System.out.println("Id:" + stuId + "B:" + "5678" );
}
@Override
public void TestQuestionC() {
System.out.println("Id:" + stuId + "C:" + "9011" );
}
}
package org.example.TemplateMethodModel;
public class TemplateMethodTest {
public static void main(String[] args) {
StudentATemplate stuA = new StudentATemplate("lily","lily");
StudentBTemplate stuB = new StudentBTemplate("sun","sun");
stuA.ExTest();
stuB.ExTest();
}
}