1. 什么是模板方法模式?
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
模板方法模式定义了一套流程1、2、3,而其中的某个节点,需要由不同的子类去完成不同的实现。
2. 模板方法模式用来干什么?
模板方法封装了一套算法执行的流程,将算法中变化的部分抽离出来由子类实现,实现代码的复用。为了不让子类重写模板方法,一般将模板方法定义为final级别。
3. 怎么实现模板方法模式?
我们知道,泡茶和泡咖啡的流程大致上是一样的,1. 烧开水,2. 冲泡, 3.把茶或咖啡倒进杯子,其中只有冲泡的行为可能不同(选择茶或者咖啡),我们就以这个为例,撸一段代码。
首先抽象出茶和咖啡的父类饮料,定义出一套准备饮料的流程,其中具体冲泡什么饮品由子类决定:
package com.template;
public abstract class Beverage {
public void prepareBeverage() {
boilWater();
brew();
pourInCup();
}
public void boilWater() {
System.out.println("烧开水");
}
public abstract void brew();
public void pourInCup() {
System.out.println("倒进杯子");
}
}
然后是茶:
package com.template;
public class Tea extends Beverage {
@Override
public void brew() {
System.out.println("冲泡茶叶");
}
}
咖啡:
package com.template;
public class Coffee extends Beverage {
@Override
public void brew() {
System.out.println("冲泡咖啡");
}
}
测试:可以看到我们代码其实跟策略模式或者工厂模式基本上一模一样,那怎么去区分模板方法、策略和工厂呢?
模板方法中,子类只实现了算法中的某一个步骤。而策略模式则是完成了整个的算法,工厂方法只用来生产实例。