模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势,即提供了一个很好的代码复用平台。
本模式通过不同学生答题来进行模拟,代码如下:
package chapter10;
public abstract class TestPaper {
public void testQuestion1() {
System.out.println("铸造倚天剑的玄铁的成分可能是()a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维");
System.out.println("答案:" + answer1());
}
protected abstract String answer1();
public void testQuestion2() {
System.out.println("杨过铲除无情花,造成()a.使这种植物不再害人 b.使一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化");
System.out.println("答案:" + answer2());
}
protected abstract String answer2();
public void testQuestion3() {
System.out.println("蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药()a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的牛奶 e.以上全不对");
System.out.println("答案:" + answer3());
}
protected abstract String answer3();
}
package chapter10;
public class TestPaperA extends TestPaper {
@Override
protected String answer1() {
return "b";
}
@Override
protected String answer2() {
return "c";
}
@Override
protected String answer3() {
return "a";
}
}
package chapter10;
public class TestPaperB extends TestPaper {
@Override
protected String answer1() {
return "c";
}
@Override
protected String answer2() {
return "a";
}
@Override
protected String answer3() {
return "a";
}
}
package chapter10;
public class Terminal {
public static void main(String[] args) {
System.out.println("A的答卷:");
TestPaper studentA = new TestPaperA();
studentA.testQuestion1();
studentA.testQuestion2();
studentA.testQuestion3();
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~荡漾的分割线~~~~~~~~~~~~~~~~~~~~~~");
System.out.println("B的答卷:");
TestPaper studentB = new TestPaperB();
studentB.testQuestion1();
studentB.testQuestion2();
studentB.testQuestion3();
}
}