模板方法模式
一、模板方法模式概念
模板方法:在一个方法中定义一个算法的骨架,具体实现延迟到子类。
应用: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(); } }
我们从中可以看到,模板方法封装了算法的步骤,专注于算法本身而不关心具体实现的细节,而且还保护了算法。算法的细节根据子类的不同而有差异。可以通过钩子去控制算法的流程。