1.实现理念
主要采用抽象类实现,遵循开闭原则,对修改关闭,对扩展开放。
2.举例
比如饮品制作,都必须要遵循一套大致相同的流程:
1.烧水
2.冲泡主料
3.加配料
4.倒入杯子
虽然大致流程相同,但是主料的选择、配料的选择都有所不同。
所以将这套流程采用抽象类中的抽象方法写出来。
然后在具体制作时,根据流程指南完成具体制作。
3.实现代码
- 模板类
public abstract class DrinkProduction {
//子类对象最后制作,只需调用次流程
void production() {
boilWater();
brew();
addCondiments();
pourIntoGlass();
}
//定义流程
void boilWater() {
System.out.println("1.烧水");
}
abstract void brew();
abstract void addCondiments();
void pourIntoGlass() {
System.out.println("4.倒入杯子");
}
}
- 实现类
//制作茶水
class ProductTea extends DrinkProduction{
@Override
void brew() {
System.out.println("2.用水冲泡茶");
}
@Override
void addCondiments() {
System.out.println("3.加冰块");
}
}
//制作咖啡
class ProductCoffee extends DrinkProduction{
@Override
void brew() {
System.out.println("2.冲泡咖啡");
}
@Override
void addCondiments() {
System.out.println("4.加糖和牛奶");
}
}
*测试类
public class TemplateDesignPattern {
public static void main(String[] args) {
//1.有茶和咖啡对象
ProductTea tea = new ProductTea();
ProductCoffee coffee = new ProductCoffee();
//2.调用制作流程制作
tea.production();
System.out.println("-------------");
coffee.production();
}
}
- 此时类图
4.模板设计模式的优点
1.有父类模板类的存在,可以控制流程让子类严格执行
2.最大程度的实现代码复用