前言
模板模式是软件设计模式的一种,其中一个抽象类的算法的步骤由其子类实现。这样,子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。
示例
饮料冲泡方法的模板
public abstract class BeverageMakingTemplate {
// 冲泡饮料的模板方法
public final void makeBeverage() {
boilWater();
brew();
pourInCup();
addCondiments();
}
// 烧开水
public void boilWater() {
System.out.println("烧水中...");
}
// 冲泡
public abstract void brew();
// 倒入杯子
public void pourInCup() {
System.out.println("倒入杯中");
}
// 加调料
public abstract void addCondiments();
}
咖啡冲泡实现
public class Coffee extends BeverageMakingTemplate{
@Override
public void brew() {
System.out.println("冲泡咖啡...");
}
@Override
public void addCondiments() {
System.out.println("添加方糖和牛奶");
}
}
茶冲泡方法实现
public class Tea extends BeverageMakingTemplate {
@Override
public void brew() {
System.out.println("冲泡茶...");
}
@Override
public void addCondiments() {
System.out.println("加点柠檬");
}
}
使用
public class Demo {
public static void main(String[] args) {
BeverageMakingTemplate coffee = new Coffee();
coffee.makeBeverage();
BeverageMakingTemplate tea = new Tea();
tea.makeBeverage();
}
}
优缺点
优点
- 封装了不变部分,扩展可变部分
- 提取公共部分代码,便于维护
- 行为由父类控制,子类实现
缺点
- 每个不同的实现都需要一个子类来实现,导致类的个数增加,系统变得更加庞大