[设计模式-行为型03]-模板方法

本文深入介绍了模板方法模式的概念、核心思想及其应用场景。该模式通过定义算法的骨架并将具体步骤留给子类实现,使得子类可以在不改变算法结构的前提下重定义算法的某些步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

未完待续……


参考链接:
1. 模板方法模式(Template Method)
2. 设计模式之禅——模板方法模式&钩子方法


也称为(其他名称)

定义

Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

模板方法模式:

定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

核心:

处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,将这个节点的代码实现转移给子类完成。

即:处理步骤在父类中定义好,具体的实现延迟到子类中定义。

说白了,就是==将一些相同操作的代码,封装成一个算法的骨架。核心的部分留在子类中操作,在父类中只把那些骨架做好==

模板方法模式是一种==基于继承的代码复用技术==,它是一种类==行为型==模式。

目的、思想

UML图

涉及对象(特有名词)

  1. 钩子方法(挂钩):通过钩子方法我们还是能够影响到模板方法的执行(不是影响它的逻辑)

缺点

优点

  • 封装不变的内容,扩展可变部分,如果我们要添加一个H3悍马模型,只需要继承父类就可以了。
  • 提取公共部分代码,便于维护
  • 行为由父类控制,子类实现。基本方法是由子类实现的,因此子类可以通过拓展的方法增加相应的功能,符合开闭原则。

区别(对比易混淆模式)

模式叙述
策略模式封装可互换的行为,然后使用委托来决定要采用哪一个行为
模板方法子类决定如何实现算法中的步骤
工厂方法由子类决定实例化哪个具体类

适用场景

  1. 实现一些操作时,整体步骤很固定,但是呢。就是其中一小部分容易变,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
  2. 多个子类有公有的方法,并且逻辑基本相同时
    重复、复杂的算法,可以把核心算法设计为模板方法,周边的细节则有各个子类实现。
  3. 代码重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后用钩子方法(见下面的”模板方法拓展“)约束其行为。

典型应用案例

其实,各个框架中,都有模板方法模式的影子。

  1. 数据库访问的封装
  2. Junit单元测试
  3. servlet中关于doGet/doPost方法的调用
  4. Hibernate中模板程序
  5. spring中JDBCTemplate,HibernateTemplate等等
  6. java.util.Arrays#sort(java.lang.Object[])方法排序,对象需要实现compareTo()方法

真实案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值