模板方法模式
模板方法模式(Template Method Pattern)又叫模板模式,是指定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤,属于行为型设计模式。
模板方法模式实际上是封装了一个固定流程,该流程由几个步骤组成,具体步骤可以由子类进行不同的实现,从而让固定的流程产生不同的结果。模板方法的本质就是抽象封装流程,然后进行类的继承实现。
通用UML类图
举例说明
我们平时在家自己做饭, (1)买菜,(2)洗菜, (3)做菜,(4)吃饭,(5)有时间的话洗碗,没时间的话就放到明天再洗,这五步就是定义的算法的流程;然后做不同菜需要买不同的材料,洗不同的材料,做法也不一样,这个就需要子类去具体实现。然后对于父类已经定义好的算法我们想做一些微调,那就是通过重写和钩子方法。
先定义一个做饭的算法,定义一个抽象类DodishTemplate,吃饭和洗碗没啥区别,已经实现好了,买菜,洗菜,做菜根据不同的菜做法是不一样的,需要子类自己去实现。第五步洗碗 haveTime 这个就是钩子方法,到底有没有时间由子类自己去考虑。
public abstract class DodishTemplate {
/**
* 做饭的过程
*/
public final void dodish() {
//1、买菜
preparation();
//2、洗菜
washVegetables();
//3、做菜
doing();
//4、吃饭
eatting();
//5、洗碗
if (haveTime()) {
washDishes();
}
}
protected abstract void preparation();
protected abstract void washVegetables();
protected abstract void doing();
protected void eatting() {
System.out.println("吃饭"