参考:B站UP主动力节点
模板方法模式
定义:子类公共的方法抽取出来封装到一个父类当中,避免代码重复。父类实现算法不变的部分,可变空间留给子类来完成。
核心是提高方法的可复用性,工具类中很常见
举例说明:设计一个课程类,先设计一个核心父类
public abstract class Project{
protected void makeProject{
this.makePPT();
if (flag()) {
this.makeNote();
}
this.makeVideo();
}
public final void makePPT(){
System.out.println("制作课程PPT");
}
public final void makeNote(){
System.out.println("制作课程讲义");
}
public final void makeVideo(){
System.out.println("制作课程视频");
}
protected boolean flag(){
return false;
}
// 交给子类判断是否制作讲义
public abstract void isMakeNote();
}
设计子类,具体实现,父类提供给子类的方法仅有isMakeNote
:
public class JavaProject extends Project{
private boolean flag;
public JavaProject(boolean flag) {
this.flag = flag;
}
@Override
public boolean flag(){
return this.flag;
}
@Override
public void isMakeNote(){
System.out.prinln("提供讲义");
}
}
如此,在实际使用中,可以通过构造器注入flag
控制是否制作讲义:
class Test{
public static void main(String[] args) {
Project javaProject = new JavaProject(true);
javaProject.makeProject();
}
}