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();
    }
}

 

posted @ 2021-07-28 10:14  一拳超人的逆袭  阅读(30)  评论(0编辑  收藏  举报