请教下模板模式
public abstract class Template { //抽象模板
protected abstract void eatBreakfast();
protected abstract void wash();
protected abstract void dressUP();
public final void morning() {
System.out.println("---起床---");
wash();
dressUP();
eatBreakfast();
System.out.println("---去上班---");
}
}
public class DailyLifeA extends Template { //实现模板
public void eatBreakfast() {
System.out.println("喝牛奶");
}
public void wash() {
System.out.println("洗澡");
}
public void dressUP() {
System.out.println("穿正装");
}
}
public class Client{ //客户端
public static void main(String[] ags) {
Template template;
template = new DailyLifeA();
template.morning();
template = new DailyLifeB();
template.morning();
}
}
输出结果:
---起床---
洗澡
穿正装
喝牛奶
---去上班---
这样是吧某些流程都封装起来等待子类来实现了 但是如果我的流程改变了 我的某个实现不想要eatBreakfast()这个步骤了,但是如果不实现这个的话程序还会报错该怎么办呢?网上搜了下说是用钩子调用控制流程-。-但还是么有理解呀
钩子方法是可选择实现的逻辑,不是必须实现的。
默认钩子方法:一个钩子方法常常由抽象类给出一个空实现作为此方法的默认实现。这种空的钩子方法叫做“Do Nothing Hook”。
命名规则:钩子方法的名字应当以do开始,这是熟悉设计模式的Java开发人员的标准做法。
按照你的需求,你的钩子方法应该这样来设计:
public abstract class Template {
protected abstract void doEatBreakfast() {}
}