话不多说,先来类图:

抽象模板类
@Data
public abstract class Paper {
public boolean flag=true;
public void testQuestion1() {
System.out.println("杨过得到,后来给了郭靖," +
"炼成倚天剑、屠龙刀的玄铁可能是[ ]\n" +
"a.球墨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维");
System.out.println("答案: " + answer1());
}
public void testQuestion2() {
System.out.println("杨过、程英、陆无双铲除了情花,造成[ ]\n" +
"a.使这种植物不再伤人 b.使一种珍惜物种灭绝\n" +
"c.破坏了那个生物圈的生态平衡 d.造成该地区荒漠化");
System.out.println("答案: " + answer2());
}
public void testQuestion3() {
System.out.println("蓝凤凰致使华山师徒、桃谷六仙呕吐不止," +
"如果你是大夫,会给他们开什么药[ ]\n" +
"a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.大量生牛奶");
System.out.println("答案: " + answer3());
}
public void additionalQuestion(){
System.out.println("附加题");
//钩子函数
if(isChooseAdditionalQuestion()){
System.out.println("附加题答案:"+additionalAnswer());
}
}
abstract String answer1();
abstract String answer2();
abstract String answer3();
abstract String additionalAnswer();
public Boolean isChooseAdditionalQuestion(){
return flag;
}
}
模板实现子类A
public class PaperA extends Paper {
@Override
public String answer1() {
return "d";
}
@Override
public String answer2() {
return "c";
}
@Override
public String answer3() {
return "c";
}
@Override
String additionalAnswer() {
return null;
}
}
模板实现子类B
public class PaperB extends Paper {
@Override
public String answer1() {
return "a";
}
@Override
public String answer2() {
return "a";
}
@Override
public String answer3() {
return "a";
}
@Override
String additionalAnswer() {
return "e";
}
}
操作类,可以封装上线文
public class TestPaperClient {
public static void main(String[] args) {
System.out.println("学生甲抄的试卷:");
PaperA studentA = new PaperA();
studentA.setFlag(false);
studentA.testQuestion1();
studentA.testQuestion2();
studentA.testQuestion3();
studentA.additionalQuestion();
System.out.println();
System.out.println("学生乙抄的试卷:");
PaperB studentB = new PaperB();
studentB.testQuestion1();
studentB.testQuestion2();
studentB.testQuestion3();
studentB.additionalQuestion();
}
}
模板方法可以添加钩子函数,欧尼呼吁一些特殊的实现,比如附件题不是每个人都会选择的!!!
网友评论