定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现。固定不变的方法用final限制,必须实现的用抽象方法,可以选择的重写或不重写则可以实现一个样例标准方法,由子类决定是否重写。
package behavioral.templatemethod.example2;
public abstract class ACourse {
protected final void makeCourse(){
this.makePPT();
this.makeVideo();
if(needWriteArticle()){
this.writeArticle();
}
this.packageCourse();
}
final void makePPT(){
System.out.println("制作PPT");
}
final void makeVideo(){
System.out.println("制作视频");
}
final void writeArticle(){
System.out.println("编写手记");
}
//钩子方法
protected boolean needWriteArticle(){
return false;
}
abstract void packageCourse();
}
package behavioral.templatemethod.example2;
public class DesignPatternCourse extends ACourse {
@Override
void packageCourse() {
System.out.println("提供课程Java源代码");
}
@Override
protected boolean needWriteArticle() {
return true;
}
}