设计模式之模板方法模式(Template)

1. 什么是模板方法模式?

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

设计模式之模板方法模式(Template)_第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("冲泡咖啡");
    }
}

测试:
设计模式之模板方法模式(Template)_第2张图片

可以看到我们代码其实跟策略模式或者工厂模式基本上一模一样,那怎么去区分模板方法、策略和工厂呢?

设计模式之模板方法模式(Template)_第3张图片

模板方法中,子类只实现了算法中的某一个步骤。而策略模式则是完成了整个的算法,工厂方法只用来生产实例。

你可能感兴趣的:(设计模式之模板方法模式(Template))