模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法结构即可重定义该算法的某些特定步骤。
在JDK中用到
模板方法模式(Template Method)
•java.io.InputStream, java.io.OutputStream, java.io.Reader和java.io.Writer的所有非抽象方法
•java.util.AbstractList, java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法
•javax.servlet.http.HttpServlet#doXXX()
文中拿考试卷作为例子
考试卷接口
/**
* Created with Intellij IDEA.
* User : Yebinghuan
* Created on 2017/8/9.
* Description :
* 试卷逻辑
*/
public interface TestPaper {
//考题1
public void examQuestions1();
//考题2
public void examQuestions2();
//答案
public String answer1();
//答案
public String answer2();
}
/**
* Created with Intellij IDEA.
* User : Yebinghuan
* Created on 2017/8/9.
* Description :
*/
public class TestPaperImpl implements TestPaper{
@Override
public void examQuestions1() {
System.err.println("1. 下面哪些是Thread类的方法()");
System.err.println("A start() B run() C exit() D getPriority()");
System.err.println("答案:"+answer1());
}
@Override
public void examQuestions2() {
System.err.println("2.下面关于java.lang.Exception类的说法正确的是()");
System.err.println("A 继承自Throwable B Serialable CD 不记得,反正不正确");
System.err.println("答案:"+answer2());
}
@Override
public String answer1() {
return "";
}
@Override
public String answer2() {
return "";
}
}
Main
public class Main {
public static void main(String[] args) {
Main m=new Main();
TestPaperImpl s1=m.new Student1();
TestPaperImpl s2=m.new Student2();
s1.examQuestions1();
s1.examQuestions2();
//学生2的答案
s2.examQuestions1();
s2.examQuestions2();
}
class Student1 extends TestPaperImpl{
@Override
public String answer1() {
return "ABD";
}
@Override
public String answer2() {
return "A";
}
}
class Student2 extends TestPaperImpl{
@Override
public String answer1() {
return "A";
}
@Override
public String answer2() {
return "A";
}
}
}
模板方法模式分析
1、模板方法模式提供了一个很好的复用平台。 提高了复用性
2、也方便一次性维护试题