作用:就是将抽象的方法放到父类中,具体的实现延迟交由各个子类去实现,这也体现了模版方法的代码复用性,再直白点,公共的代码写在父类,具体再父类写抽象并引用,子类去实现这些抽象的方法即可。
案列1、
1、模板方法抽象类
//模板方法抽象类
abstract class AbstractClass {
//模板方法
public void templateMethod() {
//写一些可以被子类共享的代码
this.primitiveOperation1();
this.primitiveOperation2();
}
public abstract void primitiveOperation1(); //子类个性的行为,放到子类去实现
public abstract void primitiveOperation2(); //子类个性的行为,放到子类去实现
}
2、各自实现特有的模板
//模板方法具体类A
class ConcreteClassA extends AbstractClass {
public void primitiveOperation1(){
System.out.println("具体类A方法1实现");
}
public void primitiveOperation2(){
System.out.println("具体类A方法2实现");
}
}
//模板方法具体类B
class ConcreteClassB extends AbstractClass {
public void primitiveOperation1(){
System.out.println("具体类B方法1实现");
}
public void primitiveOperation2(){
System.out.println("具体类B方法2实现");
}
}
3、运行和测试
public class Test {
public static void main(String[] args){
System.out.println("**********************************************");
System.out.println("《大话设计模式》代码样例");
System.out.println();
AbstractClass classA = new ConcreteClassA();
classA.templateMethod();
AbstractClass classB = new ConcreteClassB();
classB.templateMethod();
System.out.println();
System.out.println("**********************************************");
}
}
结果
案列2、 (主要)
下面的是根据试卷模版,不同的人给出相应的答案,这种设计模式就可以用在答题系统中。
1、核心
2、模板方法抽象
abstract class TestPaper {
//试题1
public void testQuestion1() {
System.out.println(" 杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ] "+
" a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维 ");
System.out.println("答案:"+this.answer1());
}
protected abstract String answer1();
//试题2
public void testQuestion2() {
System.out.println(" 杨过、程英、陆无双铲除了情花,造成[ ] "+
"a.使这种植物不再害人 b.使一种珍稀物种灭绝 c.破坏了那个生物圈的生态平衡 d.造成该地区沙漠化 ");
System.out.println("答案:"+this.answer2());
}
protected abstract String answer2();
//试题3
public void testQuestion3() {
System.out.println(" 蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ] "+
"a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.让他们喝大量的生牛奶 e.以上全不对 ");
System.out.println("答案:"+this.answer3());
}
protected abstract String answer3();
}
3、各自实现特有的模板
//学生甲答的试卷
class TestPaperA extends TestPaper {
//试题1
protected String answer1() {
return "b";
}
//试题2
protected String answer2() {
return "a";
}
//试题3
protected String answer3() {
return "c";
}
}
//学生乙答的试卷
class TestPaperB extends TestPaper {
//试题1
protected String answer1() {
return "d";
}
//试题2
protected String answer2() {
return "b";
}
//试题3
protected String answer3() {
return "a";
}
}
4、运行和结果
public class Test {
public static void main(String[] args){
System.out.println("**********************************************");
System.out.println("《大话设计模式》代码样例");
System.out.println();
System.out.println("学生甲抄的试卷:");
TestPaper studentA = new TestPaperA();
studentA.testQuestion1();
studentA.testQuestion2();
studentA.testQuestion3();
System.out.println("学生乙抄的试卷:");
TestPaper studentB = new TestPaperB();
studentB.testQuestion1();
studentB.testQuestion2();
studentB.testQuestion3();
System.out.println();
System.out.println("**********************************************");
}
}
结果