一、概念
模板模式(Template Pattern):模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。
二、实现
这里举一个考试出试卷的例子,假设一个科目的试卷题型相对固定,选择、简答、论述,每次出题都是这几种类型。而这个科目每个月都要出一张试卷进行考试。
1、模板接口,producePaper设计为final,避免子类重写。
public abstract class TestPaper {
abstract void choiceQuestion();
abstract void shortAnswerQuestion();
abstract void essayQuestion();
public final void producePaper() {
choiceQuestion();
shortAnswerQuestion();
essayQuestion();
}
}
2、子类实现
#JanuaryPaper
public class JanuaryPaper extends TestPaper {
@Override
void choiceQuestion() {
System.out.println("月考:一月份考试-选择题");
}
@Override
void shortAnswerQuestion() {
System.out.println("月考:一月份考试-简答题");
}
@Override
void essayQuestion() {
System.out.println("月考:一月份考试-论述题");
}
}
#FebruaryPaper
public class FebruaryPaper extends TestPaper {
@Override
void choiceQuestion() {
System.out.println("月考:二月份考试-选择题");
}
@Override
void shortAnswerQuestion() {
System.out.println("月考:二月份考试-简答题");
}
@Override
void essayQuestion() {
System.out.println("月考:二月份考试-论述题");
}
}
3、测试类
public class Client {
public static void main(String[] args) {
JanuaryPaper januaryPaper = new JanuaryPaper();
januaryPaper.producePaper();
System.out.println("---------------------");
FebruaryPaper februaryPaper = new FebruaryPaper();
februaryPaper.producePaper();
}
}
4、运行结果