模板方法模式

一、模板方法模式概念

模板方法:在一个方法中定义一个算法的骨架,具体实现延迟到子类。

应用:Comparable接口的CompareTo方法

钩子:是一种声明在抽象类中的方法,通常为空只会返回true,作为条件控制影响算法流程。

二、UML图

三、代码

Beverage.java

public abstract class Beverage {
    public void make() {
        step1();
        step2();
        if(hook())
            step3();
        step4();
    }
    private void step1() {
        System.out.println("烧水");
    }
    abstract void step2();
    private void step3() {
        System.out.println("加蜂蜜");
    }
    private void step4() {
        System.out.println("打包");
    }
    public  boolean hook() {
        return true;
    }
}

Tea.java

public class Tea extends Beverage{
    void step2() {
        System.out.println("柚子茶");
    }
}

Milk.java

public class Milk extends Beverage{
    void step2() {
        System.out.println("牛奶");
    }
    public boolean hook() {
        return false;
    }
}

Test.java

public class Test {
    public static void main(String[] args) {
        Beverage tea = new Tea();
        Beverage milk = new Milk();
        System.out.println("制作柚子茶。。。");
        tea.make();
        System.out.println("制作牛奶。。。");
        milk.make();
    }
}

我们从中可以看到,模板方法封装了算法的步骤,专注于算法本身而不关心具体实现的细节,而且还保护了算法。算法的细节根据子类的不同而有差异。可以通过钩子去控制算法的流程。

posted @ 2019-12-03 20:05  卑微芒果  Views(65)  Comments(0Edit  收藏  举报