一、概念
将算法通用部分抽象出来,延迟到子类实现
1.1、定义
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
Template,模板抽象类:定义算法执行顺序,和算法通用部分
ConcreteTemplete ,具体算法类:实现算法异动部分
模板模式实现关键:在于如何抽象出通用部分,按照设定好步骤的执行顺序。
1.2、解决的问题
问题分析:实际开发中存在这样一种情况,执行过程都是划分几个固定步骤,然后依序执行;但是,实际执行人不同,导致的结果也不同。例如盖房子、装修房子等等,都是按照特定工序一步步往下依序执行。
模式的解决思路:将算法执行过程,抽象剥离为几个步骤,然后按照一定顺序执行。即一个抽象类公开定义了执行它的方法的方式/模板,具体的执行延迟到模板子类完成。
二、模式的应用和优缺点
2.1、应用场景
- 实例:
1、spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。
2、软件开发的项目管理过程:需求评审/分析/设计 - 开发-测试-发布等等。
2.2、优缺点
优点:
1、提取公共代码,提高代码复用率
2、具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构缺点:
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。