是什么:
顾名思义,就是通过模板拓印的方式, 定义模板采用抽象类来定义,公共的结构化逻辑需要在抽象类中完成,只将非公共的部分逻辑抽象成抽象方法,留待子类充实实现。
AbstractClass:实现一个模板方法,定义了算法的骨架,具体子类将重定义PrimitiveOperation以实现一个算法的步骤。AbstractClass其实就是一个抽象模板,定义并实现了一个模板方法。
ConcreteClasses:ConcreteClass实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一个ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
网上有朋友总结的例子挺好的,在此借用一下。
具体代码实现例子:
AbstractClass(抽象模板):
TestPaper类
public class TestPaper {
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 String answer1() {
return null;
}
public String answer2() {
return null;
}
public String answer3() {
return null;
}
}
ConcreteClass(实现父类所定义的一个或多个抽象方法)
TestPaperA类:
/**
* 学生甲抄的试卷
*/
public class TestPaperA extends TestPaper {
@Override
public String answer1() {
return "d";
}
@Override
public String answer2() {
return "c";
}
@Override
public String answer3() {
return "c";
}
}
TestPaperB(ConcreteClass):
/**
* 学生乙抄的试卷
*/
public class TestPaperB extends TestPaper {
@Override
public String answer1() {
return "a";
}
@Override
public String answer2() {
return "a";
}
@Override
public String answer3() {
return "a";
}
}
客户端:
public class TestPaperClient {
public static void main(String[] args) {
System.out.println("学生甲抄的试卷:");
TestPaperA studentA = new TestPaperA();
studentA.testQuestion1();
studentA.testQuestion2();
studentA.testQuestion3();
System.out.println();
System.out.println("学生乙抄的试卷:");
TestPaperB studentB = new TestPaperB();
studentB.testQuestion1();
studentB.testQuestion2();
studentB.testQuestion3();
}
}
运行结果:
学生甲做的试卷:
杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ]
a.球墨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维
答案: d
杨过、程英、陆无双铲除了情花,造成[ ]
a.使这种植物不再伤人 b.使一种珍惜物种灭绝
c.破坏了那个生物圈的生态平衡 d.造成该地区荒漠化
答案: c
蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ]
a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.大量生牛奶
答案: c
学生乙做的试卷:
杨过得到,后来给了郭靖,炼成倚天剑、屠龙刀的玄铁可能是[ ]
a.球墨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维
答案: a
杨过、程英、陆无双铲除了情花,造成[ ]
a.使这种植物不再伤人 b.使一种珍惜物种灭绝
c.破坏了那个生物圈的生态平衡 d.造成该地区荒漠化
答案: a
蓝凤凰致使华山师徒、桃谷六仙呕吐不止,如果你是大夫,会给他们开什么药[ ]
a.阿司匹林 b.牛黄解毒片 c.氟哌酸 d.大量生牛奶
答案: a
这是以前在印象笔记中总结的,原文链接没有记录,敬请谅解。