通常的模板方法模式中会设计一个 abstract 的抽象方法,交给它的子类实现,这个方法称为模板方法。而钩子方法,是对于抽象方法或者接口中定义的方法的一个空实现,也是模板方法模式的一种实现方式。
1 模板方法模式中的钩子方法
我们以网络课程创建流程为例:发布预习资料 → 制作课件 PPT → 在线直播 → 提交课堂笔记 → 提交源码 → 布置作业 → 检查作业。首先创建 AbastractCourse 抽象类。
public abstract class AbastractCourse {
public final void createCourse(){
//1.发布预习资料
postPreResoucse();
//2.制作课件PPT
createPPT();
//3.在线直播
liveVideo();
//4.上传课后资料
postResource();
//5.布置作业
postHomework();
if(needCheckHomework()){
checkHomework();
}
}
protected abstract void checkHomework();
//钩子方法
protected boolean needCheckHomework(){return false;}
protected void postHomework(){
System.out.println("布置作业");
}
protected void postResource(){
System.out.println("上传课后资料");
}
protected void liveVideo(){
System.out.println("直播授课");
}
protected void createPPT(){
System.out.println("制作课件");
}
protected void postPreResoucse(){
System.out.println("发布预习资料");
}
}
上面代码中有个钩子方法,可能有些小伙伴不是太理解,在此笔者稍做解释。设计钩子方法的主要目的是干预执行流程,使得控制行为流程更加灵活,更符合实际业务的需求。钩子方法的返回值一般为适合条件分支语句的返回值(如 boolean、int 等)。小伙伴们可以根据自己的业务场景决定是否需要使用钩子方法。然后创建 JavaCourse 类。