一、模板模式介绍
模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现,但可以成为典型类中定义的方式进行。
模板模式适用于通用步骤的操作,比如做菜,不管你是西红柿炒鸡蛋,还是土豆炖牛肉实现步骤都是一样的,备料,做菜,上菜。
再比如投放系统,不管你是投放巨量引擎,广点通还是百度,前期工作实现步骤也都是一样的,配置物料信息,构建投放对象,投放广告。
二、代码实例
1、DishTemplate抽象类
package com.xu.demo.templatePattern;
/**
* 做菜模板类
* 用于定义做菜的执行步骤,所有菜都可以按照这种方式做菜
*
*/
public abstract class DishTemplate {
/**
* 做菜执行步骤
*/
public final void doDish() {
this.preparation();
this.doing();
this.carriedDishes();
}
/**
* 备料
*/
public abstract void preparation();
/**
* 做菜
*/
public abstract void doing();
/**
* 上菜
*/
public abstract void carriedDishes();
}
2、DishEggsWithTomato子类
package com.xu.demo.templatePattern;
/**
* 西红柿炒鸡蛋
*
*/
public class DishEggsWithTomato extends DishTemplate {
@Override
public void preparation() {
System.out.println("准备西红柿鸡蛋...");
}
@Override
public void doing() {
System.out.println("开始炒西红柿鸡蛋...");
}
@Override
public void carriedDishes() {
System.out.println("西红柿鸡蛋装盘...");
}
}
3、DishOnionWithTofu子类
package com.xu.demo.templatePattern;
/**
* 小葱拌豆腐
*
*/
public class DishOnionWithTofu extends DishTemplate {
@Override
public void preparation() {
System.out.println("准备小葱豆腐...");
}
@Override
public void doing() {
System.out.println("开始炒小葱拌豆腐...");
}
@Override
public void carriedDishes() {
System.out.println("小葱拌豆腐装盘...");
}
}
4、TempaltePattern类
package com.xu.demo.templatePattern;
/**
* 模板模式
* 抽象父类定义方法模板,子类自定义实现方式。
*
*/
public class TempaltePattern {
public static void main(String[] args) {
System.out.println("----------西红柿炒鸡蛋----------");
DishTemplate eggsWithTomato = new DishEggsWithTomato();
eggsWithTomato.doDish();
System.out.println("----------小葱拌豆腐----------");
DishTemplate onionWithTofu = new DishOnionWithTofu();
onionWithTofu.doDish();
}
}
运行结果:
三、Spring中的模板模式
1、RestTemplate