模板模式: 定义一个骨架, 允许子类为一个或多个步骤提供实现.
可一次性实现实现一段逻辑的不变部分,将可变部分留给子类实现避免代码重复, 将各个类的公共行为提取到一个统一父类上以完成作业,然后老师抽查作业为例子, 想思路,拿笔本,做作业等步骤都是一样,将不同老师检查作业方式不同作为钩子函数
创建一个作业工作类
public abstract class Job { protected final void doHomework() { // 想思路 this.wantThinking(); // 拿笔和本子 this.grabPenAndNotebook(); // 写作业 this.finishHomework(); // 是否检查作业 if (isTestAssignments()) { this.testAssignments(); } } /** 交给之类实现 */ abstract void testAssignments(); protected boolean isTestAssignments() { return true; } final void wantThinking(){ System.out.println("想思路"); } final void grabPenAndNotebook(){ System.out.println("拿笔和本子"); } final void finishHomework(){ System.out.println("完成作业"); } }创建一个检查作业的老师类,实现父类的预留方法
public class MathTeacher extends Job { @Override void testAssignments() { System.out.println("数学老师检查作业!"); } }测试代码
public class Test { public static void main(String[] args) { MathTeacher mathTeacher = new MathTeacher(); mathTeacher.doHomework(); } }执行结果