模板模式定义
模板模式就是通过抽象类来定义一个逻辑模板,逻辑框架、逻辑原型, 然后将无法决定的部分抽象成抽象类交由子类来实现,一般这些抽象类的调用逻辑还是在抽象类中完成的
举例
本猿的女盆友是一个高中老师。以她上一节课的周期举例:
她要线预习大纲、梳理讲课流程、做教案准备例题、开始上课、讲完一阶段给学生答疑、布置作业、批改作业。
由于要根据讲课的进度选择是否留作业,所以留作业和 批改作业有一些变数,所以要设置一个钩子,方便外部的调用
代码
/**
* 模板模式就是: ,模板模式就是通过抽象类来定义一个逻辑模板,逻辑框架、逻辑原型,
* 然后将无法决定的部分抽象成抽象类交由子类来实现,一般这些抽象类的调用逻辑还是在抽象类中完成的 。
*
*/
//逻辑模板
public abstract class TeacherCourse {
//因为逻辑流程已经定下,所以不能 被子类重写,所以要用final修饰
public final void createCourse() {
//预习大纲
this.prepareSllabus();
//授课思路梳理
this.thinking();
//准备例题
this.demo() ;
//给学生讲课
this.teach();
//给学生答疑
this.answer();
//留作业不是一个必然的过程,若果课程全部讲完,需要留作业,但是没有讲完就不需要留作业,
//所以要设置一个钩子方法,以方便与子类去微调
if(this.hasHomework()) {
//给学生留作业
this.homework();
//批改作业
this.correct();
}
System.out.println(" 一个课程的生命周期完成 ");
}
final void homework() {
System.out.println("给学生留课后作业");
}
final void correct() {
System.out.println("给学生批改作业");
}
protected boolean hasHomework() {
return false;
}
final void answer() {
System.out.println("给学生答疑");
}
final void teach() {
System.out.println("给学生上课");
}
final void demo() {
System.out.println("准备例题");
}
final void thinking() {
System.out.println("授课思路梳理");
}
final void prepareSllabus(){
System.out.println("预习大纲");
}
}
//上个不留作业的课程
//上第一节课 集合
public class ListCourse extends TeacherCourse {
private boolean homework = false;
public ListCourse(boolean homework) {
this.homework = homework;
}
@Override
protected boolean hasHomework() {
return this.homework;
}
}
//测试
public class TemplateTest {
public static void main(String[] args) {
TeacherCourse course = new ListCourse(true);
course.createCourse();
}
}