13.模板方法模式
在一个抽象类公开定义了执行它的方法的模板,它的子类可以按照需要重写方法实现,单调用将以抽象类种定义的方式进行
public abstract class Drink { //不允许子类重写此方法 public final void make() { add(); doSomething(); give(); } //可以重写的方法 public abstract void add(); public void doSomething(){ System.out.println("榨汁"); } public void give(){ System.out.println("打包"); } }
public class Coffee extends Drink { @Override public void add() { System.out.println("加入咖啡豆"); } public static void main(String[] args) { Coffee coffee = new Coffee(); coffee.make(); } }
钩子方法--默认不做任何事,子类可以看情况去重写和选择调用
public abstract class Drink { //不允许子类重写此方法 public final void make() { if(wantAdd()) add(); doSomething(); give(); } //可以重写的方法 public abstract void add(); public void doSomething(){ System.out.println("榨汁"); } public void give(){ System.out.println("打包"); } //由这个方法判断是否添加东西 boolean wantAdd(){ return true; } }
/** * @author wuyimin * @create 2021-07-28 9:57 * @description 钩子方法演示 */ public class CoffeeWithoutAdd extends Drink { //空实现就好了 @Override public void add() { } @Override boolean wantAdd() { return false; } public static void main(String[] args) { CoffeeWithoutAdd coffeeWithoutAdd = new CoffeeWithoutAdd(); coffeeWithoutAdd.make(); } }