模板模式

jasmine 于 2019-03-07 发布

类图

模板方法类图

理解:
1)两个子类同时实现一个抽象父类,父类中定义模板流程方法,子类实例进行调用执行
2)钩子是个很巧妙的设计,子类可以实现,也可以不实现,不实现的情况下抽象父类中有默认值

代码

//1、父类
public abstract class Beverage {

    protected final void make() {
        this.boilWater();
        this.brew();
        this.pourInCup();
        if (hook()) {
            this.addCondiments();
        }
    }

    //第一步,烧水
    final void boilWater() {
        System.out.println("1.烧水");
    }
    
    //第二步,冲泡
    abstract void brew();

    //第三步,将(***)倒入杯子
    final void pourInCup() {
        System.out.println("3.倒入杯子");
    }

    //加调味
    abstract void addCondiments();

    //钩子方法
    protected boolean hook() {
        return false;
    }
}

//2、子类:茶
public class Tea extends Beverage {
    @Override
    void brew() {
        System.out.println("2.冲泡茶");
    }

    @Override
    void addCondiments() {
        System.out.println("4.加柠檬");
    }
}

//3、子类:咖啡
public class Coffeee extends Beverage {
    @Override
    void brew() {
        System.out.println("2.冲泡咖啡");
    }

    @Override
    void addCondiments() {
        System.out.println("4.加糖");
    }

    @Override
    protected boolean hook() {
        //通过条件判断,返回true/false
        return true;
    }
}

//4、应用
public class Test {
    public static void main(String[] args) {
        Tea tea = new Tea();
        tea.make();

        Coffeee coffeee = new Coffeee();
        coffeee.make();
    }
}

应用

1、JDK中的compareTo方法

模板方法排序

2、项目中模板方法使用

设计模式-模板-项目应用