粉粉蕉的笔记本粉粉蕉的笔记本
  • JAVA

    • 代码笔记
    • Java8实战
    • 分布式事务实战(Seata)
    • 模板引擎(FreeMarker)
    • SpringSecurity
  • PYTHON

    • 概述
    • python3
    • python3(菜鸟教程)
    • pandas
    • numpy
    • matplotlib
  • 中间件

    • Kafka
    • RocketMQ
    • Redis
    • MongoDB
    • Elastic Search
  • 数据库

    • Mysql
  • 设计模式
  • 运维

    • linux命令速查
    • windows命令速查
    • Docker笔记
    • kubernetes学习笔记
    • kubernetes实操笔记
    • 运维工具大全
    • git操作宝典
  • 大数据

    • 概览
    • Hadoop
    • Hive
  • 机器学习

    • 机器学习概览
  • 概率论
  • 线性代数
  • 统计学
  • 金融知识学习
  • 聚宽
  • 因子分析
  • RSS
  • 资源导航
  • 医保
  • 健身

    • 笔记
    • 训练计划
  • 装修攻略
  • 读书笔记

    • 《深度学习》
我也想搭建这样的博客!
🚋开往
  • JAVA

    • 代码笔记
    • Java8实战
    • 分布式事务实战(Seata)
    • 模板引擎(FreeMarker)
    • SpringSecurity
  • PYTHON

    • 概述
    • python3
    • python3(菜鸟教程)
    • pandas
    • numpy
    • matplotlib
  • 中间件

    • Kafka
    • RocketMQ
    • Redis
    • MongoDB
    • Elastic Search
  • 数据库

    • Mysql
  • 设计模式
  • 运维

    • linux命令速查
    • windows命令速查
    • Docker笔记
    • kubernetes学习笔记
    • kubernetes实操笔记
    • 运维工具大全
    • git操作宝典
  • 大数据

    • 概览
    • Hadoop
    • Hive
  • 机器学习

    • 机器学习概览
  • 概率论
  • 线性代数
  • 统计学
  • 金融知识学习
  • 聚宽
  • 因子分析
  • RSS
  • 资源导航
  • 医保
  • 健身

    • 笔记
    • 训练计划
  • 装修攻略
  • 读书笔记

    • 《深度学习》
我也想搭建这样的博客!
🚋开往
  • 设计模式

  • 创建型

    • 工厂模式
    • 单例模式
    • 建造者模式
    • 原型模式
  • 结构型

    • 适配器模式
    • 装饰模式
    • 代理模式
    • 外观模式
    • 桥接模式
    • 组合模式
  • 行为型

    • 享元模式
    • 策略模式
    • 模板方法模式
    • 观察者模式
    • 迭代子模式
    • 责任链模式
    • 命令模式
    • 备忘录模式
    • 状态模式
    • 访问者模式
    • 中介者模式
    • 解释器模式

模板方法模式

描述

场景:
某个函数有一个固定的流程,流程按一定的步骤进行;但这些步骤的具体实现不确定,或者说可以被修改。

例如“银行办理业务”,分为“取号”、“排队”、“办理业务”、“评价服务”几个步骤。其中“取号”可以“现场取”、“手机取”;“办理业务”可以是“取款”、“存款”等等。

做法:
同样拿银行办理业务作例子。 定义一个抽象类,其中runBusiness定义了办理业务的固定流程,其余四个方法由子类去实现。

代码实现示例

定义一个抽象类,其中runBusiness定义了办理业务的固定流程,其余四个方法由子类去实现。

public abstract class BussinessTemplate{
  /**办理业务的抽象流程**/
  public void runBusiness(){
      getNum();
      inQueue();
      doBusiness();
      judgeService();
  }
  /**下面的步骤因为不固定,因此定义为抽象方法。
  若步骤是明确且固定不变的,则可直接在此实现,不用定义为抽象方法。**/
  /**取号**/
  protected abstract void getNum();
  /**排队**/
  protected abstract void inQueue();
  /**办理业务**/
  protected abstract void doBusiness();
  /**评价服务**/
  protected abstract void judgeService();
}

若要写一个“存款”的流程,则只需继承上面这个BussinessTemplate抽象类,并实现里面的抽象方法即可。

实际应用场景

FAQ

Last Updated: 10/11/23, 6:07 AM
Contributors: dongyz8
Prev
策略模式
Next
观察者模式