一、模板模式介绍
模板方法模式(Template Method Design Pattern)** 行为型设计模式。
模板方法模式定义:在一个方法中定义一个算法骨架,规范操作步骤流程,将其中一个或多个步骤的具体实现交由其子类进行实现,在不改变流程步骤的前提下,重新定义步骤的具体实现。
在定义中,算法骨架通常特指业务逻辑流程,在某个类中,包含骨架流程定义的方法称为模板方法。
二、模板使用套路
业务场景:员工业绩考核,考核有固定的流程,但是有多套的考核标准。
2.1、考核流程
考核流程的代码实现可以分为五个步骤
step1、初始化考核结果数据
step2、用户信息等是否符合考核标准
step3、准备考核数据
step4、进行考核
step5、保存考核数据
2.2、考核标准
此时有两套考核标准,考核流程一致,不同的是考核数据(step3),和考核算法(step4)不一致。
2.3、实现
实现代码如下:
如上述代码,根据考核流程指定考核模板类 PerformanceEvaluationTemplate
,其中流程骨架定义的模板方法为 PerformanceEvaluationTemplate#performanceEvaluation
。
该方法中定义了考核流程定义,其中除了 step3、考核数据准备
和 step4、考核
外,其余步骤流程都是通用的。
而针对不同考核标准的 考核数据准备 以及 考核实现 则有特定的考核标准子类来实现,如:FirstStandard
和 SeconStandard
。
这两个类都继承了模板类 PerformanceEvaluationTemplate
,考核流程固定,不固定的就是考核数据的准备 和 考核标准。
三、Mybatis 中的模板
在 Mybaits 核心处理架构层中,Executor
执行器是执行 Sql 的入口,针对 Executor
执行器,而关于 SQL 的执行操作有一定的流程性,Mybatis 提供有模板类 BaseExecutor
,由模板类 BaseExecutor
规范执行流程,通用流程操作在模板类中实现,其余特殊的具体细节则由其子类完成BaseExecutor
模板及其子类相关类图结构如下
遵守 BaseExecutor
执行模板的类有 SimpleExecutor
、BatchExecutor
、ReuseExecutor
。BaseExecutor
模板类流程骨架代码,如下
如图所示,针对 update()
模板方法而言,该方法承接了增删改的操作,在真正执行操作前,需要进行相关的流程操作,比如:Executor
是否关闭等,在模板类中进行通用代码的实现。
而具体的操作则有其子类根据特定的场景(如:批量操作)进行实现。
也就是说 BaseExecutor
规范了操作了流程,并实现了通用流程代码,而最后需要实现的操作逻辑,则由其子类来完成
【公众号】花好夜猿