从这节开始,我们进入行为型模式的学习。行为型模式第一个模式就是模板方法模式。
概念:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
只有两个角色,抽象模板和具体模板类。抽象模板负责定义模板方法和其他方法,并在模板方法中以一定顺序调用其他方法。其他方法可以是抽象方法,通常需要子类进行重写(就是所谓的延迟到子类中实现),也可以是具体方法,一般是通用的步骤。
用一个咖啡机的例子帮助大家理解:
public abstract class CoffeeMaker {
// 模板方法:制作咖啡的过程
public final void makeCoffee() {
grindBeans();
brew();
pourIntoCup();
addCondiments();
}
// 基本操作:磨豆子,由子类实现
abstract void grindBeans();
// 基本操作:冲泡咖啡,由子类实现
abstract void brew();
// 具体操作:将咖啡倒入杯中,这是固定步骤,不需要子类覆盖
void pourIntoCup() {
System.out.println("将咖啡倒入杯中");
}
// 基本操作:添加调料,由子类实现
abstract void addCondiments();
}
class EspressoMachine extends CoffeeMaker {
@Override
void grindBeans() {
System.out.println("研磨咖啡豆,磨成意式咖啡粉");
}
@Override
void brew() {
System.out.println("调制意式浓缩咖啡");
}
@Override
void addCondiments() {
System.out.println("添加意式浓缩咖啡特有原料");
}
}
public class LatteMachine extends CoffeeMaker {
@Override
void grindBeans() {
System.out.println("研磨咖啡豆,磨成拿铁咖啡粉");
}
@Override
void brew() {
System.out.println("调制拿铁咖啡");
}
@Override
void addCondiments() {
System.out.println("加入牛奶等原料");
}
}
public class Demo {
public static void main(String[] args) {
CoffeeMaker espressoMaker = new EspressoMachine();
CoffeeMaker latteMaker = new LatteMachine();
System.out.println("制作意式浓缩咖啡 : ");
espressoMaker.makeCoffee();
System.out.println("*********************************分割线****************************************");
System.out.println("制作拿铁 : ");
latteMaker.makeCoffee();
}
}
如果大家需要视频版本的讲解,欢迎关注我的B站:
十四、设计模式之模板方法模式