设计模式-模板方法模式
-
定义
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 -
例子
java集合框架中的AbstractCollection -
代码实例
/** * 场景:泡茶与泡咖啡流程大致相同,只有原料不同,如何抽象二者的算法,实现代码复用 */ /** * 饮料模板 */ abstract class Drink { // 准备饮料,算法流程 final void prepare() { boilWater(); brew(); pourInCup(); addSomething(); } final void boilWater() { System.out.println("烧水"); } // 加入原料,抽奖方法,必须由子类实现 abstract void brew(); final void pourInCup() { System.out.println("倒进杯子"); } // 加入其他调料,钩子,提供默认实现 void addSomething() { System.out.println("什么都不加"); } } class Tea extends Drink { @Override void brew() { System.out.println("倒入茶叶"); } } class Coffee extends Drink { @Override void brew() { System.out.println("倒入咖啡"); } // 使用钩子,hook @Override public void addSomething() { System.out.println("加糖"); } } // 测试 class DrinkTest { public static void main(String[] args) { Tea tea = new Tea(); tea.prepare(); Coffee coffee = new Coffee(); coffee.prepare(); } }