在模板的基础上,只对某些特定的部分进行变动。
将所有重复的代码都上升到父类上去,而不是让每个子类都重复。
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同
时,我们通常考虑用模板方法来处理。 ————摘自《大话设计模式》
笔者私下认为该模式较为简单,比较好理解,直接上代码:
①、模板类#########################################
/**
* 考题类,模板
*/
public abstract class Question {
public void question1(){ //考题一,不同子类拿到的考题完全相同,只是答案部分有差异
System.out.println("考题1——下面的几个小伙伴你认为最帅的是:a、小明\tb、Duke\tc、小刚\td、Duke");
System.out.println("您的答案是:"+answer1());
}
protected abstract String answer1(); //考题一的答案,由子类给出具体实现
public void question2(){ //考题二
System.out.println("考题2——Duke的博文没有人评论的原因是:a、写的太烂\tb、读者太懒\tc、命\td、人品");
System.out.println("您的答案是:"+answer2());
}
protected abstract String answer2(); //考题二的答案
}
②、子类#########################################
/**
* 考生一,子类
*/
public class Examinee1 extends Question {
@Override
public String answer1() { //第一题的解答
return "a";
}
@Override
public String answer2() { //第二题的解答
return "c";
}
}
/**
* 考生二,子类
*/
public class Examinee2 extends Question {
@Override
public String answer1() { //第一题的解答
return "d";
}
@Override
public String answer2() { //第二题的解答
return "a";
}
}
测试类#########################################
public class Test {
public static void main(String[] args) throws Exception {
Question q1 = new Examinee1();
Question q2 = new Examinee2();
System.out.println("考生1的答案:");
q1.question1();
q1.question2();
System.out.println("\n考生2的答案:");
q2.question1();
q2.question2();
}
}
运行结果:
Ps:两考生拿到的题目相同,解答不同