一、模板模式介绍


模板方法模式(Template Method Design Pattern)** 行为型设计模式。
模板方法模式定义:在一个方法中定义一个算法骨架,规范操作步骤流程,将其中一个或多个步骤的具体实现交由其子类进行实现,在不改变流程步骤的前提下,重新定义步骤的具体实现。
在定义中,算法骨架通常特指业务逻辑流程,在某个类中,包含骨架流程定义的方法称为模板方法。

二、模板使用套路

业务场景:员工业绩考核,考核有固定的流程,但是有多套的考核标准。

2.1、考核流程

考核流程的代码实现可以分为五个步骤
step1、初始化考核结果数据
step2、用户信息等是否符合考核标准
step3、准备考核数据
step4、进行考核
step5、保存考核数据

2.2、考核标准

此时有两套考核标准,考核流程一致,不同的是考核数据(step3),和考核算法(step4)不一致。

2.3、实现

实现代码如下:
[设计模式]-[行为型]-模板-介绍及应用 - 图1
如上述代码,根据考核流程指定考核模板类 PerformanceEvaluationTemplate ,其中流程骨架定义的模板方法为 PerformanceEvaluationTemplate#performanceEvaluation
该方法中定义了考核流程定义,其中除了 step3、考核数据准备step4、考核 外,其余步骤流程都是通用的。
而针对不同考核标准的 考核数据准备 以及 考核实现 则有特定的考核标准子类来实现,如:FirstStandardSeconStandard
这两个类都继承了模板类 PerformanceEvaluationTemplate,考核流程固定,不固定的就是考核数据的准备考核标准

三、Mybatis 中的模板

在 Mybaits 核心处理架构层中,Executor 执行器是执行 Sql 的入口,针对 Executor 执行器,而关于 SQL 的执行操作有一定的流程性,Mybatis 提供有模板类 BaseExecutor,由模板类 BaseExecutor 规范执行流程,通用流程操作在模板类中实现,其余特殊的具体细节则由其子类完成
BaseExecutor 模板及其子类相关类图结构如下
[设计模式]-[行为型]-模板-介绍及应用 - 图2
遵守 BaseExecutor 执行模板的类有 SimpleExecutorBatchExecutorReuseExecutor
BaseExecutor 模板类流程骨架代码,如下
[设计模式]-[行为型]-模板-介绍及应用 - 图3
如图所示,针对 update() 模板方法而言,该方法承接了增删改的操作,在真正执行操作前,需要进行相关的流程操作,比如:Executor 是否关闭等,在模板类中进行通用代码的实现。
而具体的操作则有其子类根据特定的场景(如:批量操作)进行实现。
也就是说 BaseExecutor 规范了操作了流程,并实现了通用流程代码,而最后需要实现的操作逻辑,则由其子类来完成


【公众号】花好夜猿
wxlogo.jpg