定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
例子:比较重大的考试往往有A、B两套试卷,其中一套出现问题可以立马更换另一套。
定义基类:测试试卷
public abstract class TestPaper {
public void testA(){
System.out.println("测试题A的答案:"+answerA());
}
public void testB(){
System.out.println("测试题B的答案:"+answerB());
}
/**
* 测试A答案
* @return
*/
public abstract String answerA();
public abstract String answerB();
}
派生类:A试卷
public class TestPaperA extends TestPaper {
@Override
public String answerA() {
return "A";
}
@Override
public String answerB() {
return "A";
}
}
派生类:B试卷
public class TestPaperA extends TestPaper {
@Override
public String answerA() {
return "A";
}
@Override
public String answerB() {
return "A";
}
}
测试
public class Main {
public static void main(String[] args) {
System.out.println("A卷答案:");
TestPaper testPaperA = new TestPaperA();
testPaperA.testA();
testPaperA.testB();
System.out.println("===================");
System.out.println("B卷答案:");
TestPaper testPaperB = new TestPaperB();
testPaperB.testA();
testPaperB.testB();
}
}
总结:
优点:提供了一个比较好的代码复用平台,可以不改变算法的结构去重新定义算法的某些特定步骤
缺点:增加了系统的复杂性和抽象性以及理解难度(设计模式中的通用缺点)