设计模式之旅—模板方法模式

模板方法模式分析思路介绍:

  • 模板方法模式的介绍
  • 模板方法模式的实战
  • 模板方法模式的总结

一、模板方法模式介绍

  • 定义: 模板方法模式又叫模板模式(Template Pattern),一个抽象类公开定义了执行它的方法的方式或者模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。(即模板方法模式定义一个操作中的基本骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构就可以重定义该算法的某些特定步骤;这种类型的设计属于行为型模式)。
  • 主要解决: 一些方法通用,却在每一个子类都重新写了这一方法。
  • 应用实例介绍: 1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。 2、西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。 3、Spirng 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。
  • 案例场景描述: hello~ 大家好!随着小明两人的共同努力小日子过得很富有,小黄也是特别注重养生,每天早上起来都会自己亲手做豆浆和营养早餐。但小明和小红的事情最终还是纸包不住火被小黄知道了,小黄一气之下就离家出走了(回娘家了)!!!小黄走后小明是日夜辗转反侧的睡不着,一闭上眼睛脑中都是贴心小黄的身影,小明也是慢慢后悔了,最终决定要用自己的实际行动来迎回小黄(爱心早餐行动),所以问题就来了:小明也要开始尝试着做豆浆和准备其他早餐,然而打豆浆也是很需要技术含量的,怎样做豆浆喃???要添加什么辅料才能既有营养又不那么单调喃???那么故事就开始了,让我们一同看一下吧!

二、模板方法模式的实战

1、模板方法模式原理类图

1)类图的展示
在这里插入图片描述
在这里插入图片描述
2)类图的介绍

  • AbstractClass抽象类:实现了模板方法(template),定义了算法的基本框架,具体子类需要去实现其他的抽象方法operation*()
  • ConcreteClass:实现抽象方法operation*(),以完成流程中特殊子类的步骤
2、案例场景详细描述
  • 随后小明上网查看了一些制作豆浆的流程,然后总结出了做豆浆的基本步骤:选材–>添加配料–>浸泡–>放到豆浆机中打碎,然而为了能做出既有营养又不那么单调的豆浆,小明尝试着添加不同的配料(苹果-Apple,香蕉-Banana和纯豆浆-pureSoyBeanMilk)来制作不同口味的豆浆-SoyBeanMilk,然后选材、浸泡和放到豆浆机中打碎这几个步骤对于制作每种口味的豆浆都是一样的,所以就可以抽离成为制作豆浆的模板,从而着重于配料的添加,其中有一个钩子方法(视子类的具体情况来决定要不要覆盖相关方法的方式)。
3、结合案例场景分析(两种实现方式)
方式一:模板方法模式的实现

1)豆浆类的定义
在这里插入图片描述
2)苹果口味豆浆的实现
在这里插入图片描述
3)香蕉口味豆浆的实现
在这里插入图片描述
4)Test类的定义
在这里插入图片描述
5)执行结果
在这里插入图片描述

方式二:模板方法模式的钩子方法的实现

1)豆浆类的定义
在这里插入图片描述
2)纯豆浆的实现
在这里插入图片描述
3)Test类的定义
在这里插入图片描述
4)执行结果
在这里插入图片描述

三、模板方法模式的总结

1、模板方法模式的实现要素
  • 首先,要准备一个抽象类,将部分逻辑一具体方法的形式实现
  • 然后,声明一些抽象方法交由子类实现剩余逻辑,用钩子方法给予子类更大的灵活性
  • 最后,将方法汇总构成一个不可改变的模板方法
  • 为防止恶意操作,一般模板方法都加上 final 关键词
2、模板方法模式的使用场景
  • 有多个子类共有的方法且操作遵循相似的逻辑
  • 重构时把相同的代码抽取到父类中
  • 重要、复杂的方法,核心算法设计为模板方法
3、模板方法模式的优缺点
<【优点】>
  • 封装性好(封装不变部分,扩展可变部分)
  • 复用性好(提取公共代码,便于维护)
  • 屏蔽细节(行为由父类控制,子类实现)
  • 便于维护
<【缺点】>
  • 继承方面:由于每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大,维护起来或者相关细节改动还是比较麻烦的
4、具体相关应用实例
  • Spring IOC容器初始化时运用到模板方法模式
  • 相关公用方法的定义也是使用模板方法的模式
5、模板方法模式的注意事项和细节(其他网友的总结)
  • 基本思想是:算法只存在于一个地方,也就是在父类中,容易修改。需要修改算法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些修改
  • 实现了最大化代码复用。父类的模板方法和已实现的某些步骤会被子类继承而直接使用。
  • 既统一了算法,也提供了很大的灵活性。父类的模板方法确保了算法的结构保持不变,同时由子类提供部分步骤的实现。
  • 该模式的不足之处:每一个不同的实现都需要一个子类实现,导致类的个数增加,使得系统更加庞大
  • 一般模板方法都加上final关键字,防止子类重写模板方法.
  • 模板方法模式使用场景:当要完成在某个过程,该过程要执行一系列步骤,这一系列的步骤基本相同,但其个别步骤在实现时可能不同,通常考虑用模板方法模式来处理
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值