当前位置: 首页 > 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.dtcms.com/a/340998.html

相关文章:

  • 在 Ubuntu Linux LTS 上安装 SimpleScreenRecorder 以录制屏幕
  • 软考中级习题与解答——第一章_数据结构与算法基础(1)
  • 软考网工选择题节选-2
  • uniapp:h5链接拉起支付宝支付
  • uni-app跨端开发最后一公里:详解应用上架各大应用商店全流程
  • 从协同设计到绿色制造:工业云渲染的价值闭环
  • uniapp 手写签名组件开发全攻略
  • 三极管单电源供电中电阻关系的理解
  • Oracle:创建触发器,当目标表相关字段有数据变动时,存入临时表
  • 开发避坑指南(29):微信昵称特殊字符存储异常修复方案
  • 0基础安卓逆向原理与实践:第5章:APK结构分析与解包
  • pinctrl和gpio子系统实验
  • 读者写者问题
  • 接地电阻柜的核心作用
  • postman+newman+jenkins接口自动化
  • Python 文件操作与异常处理全解析
  • 7.Kotlin的日期类
  • Flink实现Exactly-Once语义的完整技术分解
  • 自动驾驶导航信号使用方式调研
  • ABAP OOP革命:ALV报表面向对象改造深度实战
  • PiscCode使用MediaPipe Face Landmarker实现实时人脸特征点检测
  • Tomcat 性能优化终极指南
  • 从零开始学AI——13
  • 吴恩达 Machine Learning(Class 3)
  • MySQL 8.x的性能优化文档整理
  • JavaScript 性能优化实战(易懂版)
  • InfluxDB 查询性能优化实战(一)
  • 【PSINS工具箱】平面上的组合导航,观测量为位置、速度、航向角。附完整的MATLAB代码
  • sqli-labs通关笔记-第58关 GET字符型报错注入(单引号闭合 限制5次探测机会)
  • 六大缓存(Caching)策略揭秘:延迟与复杂性的完美平衡