当前位置: 首页 > news >正文

23种设计模式——模板方法模式(Template Method Pattern)详解

 ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 设计模式
✨特色专栏: 知识分享
🥭本文内容: 23种设计模式——模板方法模式(Template Method Pattern)详解
📚 ** ps **  : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。


目录

一、背景

二、介绍

三、核心概念

四、使用场景

五、Java代码示例

六、优点

七、注意事项


一、背景

模板方法模式在项目java项目中偶尔会有使用,特别是在封装基类并且基类的某个方法执行顺序(比如生命周期)很重要的时候。比如android的基类activity代码。


二、介绍

模板方法模式是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现。这种模式使得子类可以不改变算法结构的情况下重新定义算法的某些特定步骤。


三、核心概念

  1. ​抽象类(Abstract Class)​​:定义算法骨架和抽象方法

  2. ​具体类(Concrete Class)​​:实现抽象类中的抽象方法


四、使用场景

  • 当多个类有相同的方法,但实现方式不同时

  • 需要控制子类扩展时(通过钩子方法)

  • 重构时发现多个类有相似的算法结构时


五、Java代码示例

// 抽象类定义模板方法
abstract class AbstractClass {// 模板方法,定义算法骨架public final void templateMethod() {step1();step2();step3();if (hookMethod()) {step4();}}// 具体步骤private void step1() {System.out.println("执行步骤1");}// 抽象方法,由子类实现protected abstract void step2();// 默认实现,子类可选择覆盖protected void step3() {System.out.println("执行默认步骤3");}protected void step4() {System.out.println("执行可选步骤4");}// 钩子方法,子类可覆盖以改变算法流程protected boolean hookMethod() {return true;}
}// 具体实现类A
class ConcreteClassA extends AbstractClass {@Overrideprotected void step2() {System.out.println("ConcreteClassA 实现步骤2");}@Overrideprotected boolean hookMethod() {return false; // 不执行步骤4}
}// 具体实现类B
class ConcreteClassB extends AbstractClass {@Overrideprotected void step2() {System.out.println("ConcreteClassB 实现步骤2");}@Overrideprotected void step3() {System.out.println("ConcreteClassB 覆盖步骤3");}
}// 使用示例
public class TemplateMethodDemo {public static void main(String[] args) {AbstractClass classA = new ConcreteClassA();classA.templateMethod();System.out.println("----------------");AbstractClass classB = new ConcreteClassB();classB.templateMethod();}
}

六、优点

  1. 提高代码复用性,将公共代码放在抽象类中

  2. 便于扩展,子类只需实现自己的特定步骤

  3. 符合开闭原则,增加新子类无需修改现有代码


七、注意事项

  1. 模板方法应声明为final,防止子类覆盖算法结构

  2. 抽象方法数量不宜过多,否则会增加子类实现难度

  3. 合理使用钩子方法,增加灵活性

模板方法模式在Java中广泛应用,例如:

  • Java IO中的InputStream/OutputStream

  • Servlet中的HttpServlet

  • Spring框架中的JdbcTemplate等


最后,

        其它设计模式会陆续更新,希望文章对你有所帮助!

http://www.xdnf.cn/news/1334215.html

相关文章:

  • JavaScript 性能优化实战:从原理到落地的完整指南
  • 深入解析RAGFlow六阶段架构
  • element table 表格多选框选中高亮
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码2
  • 【网络运维】Linux 文本处理利器:sed 命令
  • Obsidian 1.9.10升级
  • Lecture 6 Kernels, Triton 课程笔记
  • python-使用鼠标对图片进行涂抹自定义绘图
  • React框架超详细入门到实战项目演练【前端】【React】
  • 玳瑁的嵌入式日记D21-08020(数据结构)
  • 河南萌新联赛2025第六场 - 郑州大学
  • 一种数字相机中的自动曝光算法
  • Java 性能优化实战(二):JVM 调优的 5 个核心维度
  • ABAP OOP革命:ALV报表面向对象改造深度实战
  • 基于Python的反诈知识科普平台 Python+Django+Vue.js
  • 49 C++ STL模板库18-类模板-pair
  • 解决前端项目启动时找不到esm文件的问题
  • PostgreSQL 流程---更新
  • 力扣面试150(61/100)
  • 使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本1)
  • 笔试——Day44
  • 使用RealSense相机和YOLO进行实时目标检测
  • 从零开发Java坦克大战Ⅱ(上) -- 从单机到联机(架构演进与设计模式剖析)
  • 01.初识mysql数据库,了解sql语句
  • React-native之组件
  • 《算法导论》第 34 章 - NP 完全性
  • J1939协议
  • C++围绕音视频相关的资料都有哪些?如何进行学习
  • 升级Android系统webview
  • 运维日常工作100条