Java设计模式 二十 模板方法模式 (Template Method Pattern)

【愚公系列】二十三种设计模式(二十二)-模板方法模式(Template Method Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

模板方法模式 (Template Method Pattern)

模板方法模式是一种行为型设计模式,它通过定义一个操作中的算法框架,将某些步骤的实现延迟到子类中。模板方法模式使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。模板方法模式的关键思想是:定义一个固定的算法框架,将具体步骤的实现延迟到子类。


1. 模板方法模式的组成

模板方法模式通常包含以下几个角色:

  • AbstractClass(抽象类):定义了算法的模板方法,模板方法由多个步骤组成,其中有些步骤是具体实现,有些步骤是抽象的,子类需要重写这些抽象步骤。模板方法通常是一个公共的操作,包含了算法的主要结构。

  • ConcreteClass(具体类):实现抽象类中的抽象方法,并提供具体的实现。子类可以覆盖抽象方法来改变算法的具体行为。

  • Client(客户端):客户端通过调用抽象类中定义的模板方法来执行算法。


2. 模板方法模式的工作流程

  1. 抽象类定义了一个算法的模板,模板方法中包含了若干个步骤。
  2. 具体类实现了抽象类中的某些步骤。可以通过重写这些方法来实现不同的行为。
  3. 客户端代码通过调用抽象类中的模板方法来执行算法。

模板方法模式的目的是把固定的部分放在父类中,而允许子类去定义可变的部分。


3. 模板方法模式的实现

场景示例:做咖啡与茶的过程

假设我们有一个抽象类Beverage,它定义了制作饮料的模板,具体的制作细节(比如咖啡或茶的具体做法)由子类来实现。这个例子展示了模板方法模式如何用来抽象化饮料制作过程的共同步骤。


1) 定义抽象类

Beverage类是抽象类,它定义了制作饮料的步骤,prepareRecipe()方法就是模板方法,决定了制作饮料的顺序。

// 抽象类:饮料
public abstract class Beverage {

    // 模板方法
    public final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    // 固定步骤
    private void boilWater() {
        System.out.println("Boiling water");
    }

    private void pourInCup() {
        System.out.println("Pouring into cup");
    }

    // 可变步骤,子类必须实现
    protected abstract void brew();
    protected abstract void addCondiments();
}

2) 定义具体类

Coffee类和Tea类继承自Beverage类,并实现了brew()和addCondiments()方法,分别定义了具体的咖啡和茶的制作过程。

// 具体类:咖啡
public class Coffee extends Beverage {

    @Override
    protected void brew() {
        System.out.println("Brewing coffee");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}

// 具体类:茶
public class Tea extends Beverage {

    @Override
    protected void brew() {
        System.out.println("Steeping the tea");
    }

    @Override
    protected void addCondiments() {
        System.out.println("Adding lemon");
    }
}

3) 客户端代码

客户端代码通过调用模板方法prepareRecipe()来完成饮料的制作。客户端不需要关心具体的步骤,只需使用prepareRecipe()方法即可。

public class Client {
    public static void main(String[] args) {
        Beverage coffee = new Coffee();
        coffee.prepareRecipe();  // 输出:制作咖啡的步骤

        System.out.println("\n");

        Beverage tea = new Tea();
        tea.prepareRecipe();  // 输出:制作茶的步骤
    }
}

运行结果:
Boiling water
Brewing coffee
Pouring into cup
Adding sugar and milk

Boiling water
Steeping the tea
Pouring into cup
Adding lemon

4. 模板方法模式的优点

  1. 代码复用: 通过将固定的算法步骤放在抽象类中,避免了代码的重复,促进了代码的复用。
  2. 控制反转: 子类通过实现抽象方法来定制可变的部分,不需要修改算法的结构,符合开闭原则。
  3. 算法的固定结构: 模板方法确保了算法的执行顺序,算法结构固定,不允许修改。
  4. 提高可扩展性: 子类可以通过实现抽象方法来扩展算法的可变部分,而不改变算法的固定结构。

5. 模板方法模式的缺点

  1. 类的继承关系较深: 模板方法模式使用了继承的方式来重写模板方法中的部分步骤,可能会导致类的继承关系过于复杂。
  2. 灵活性较低: 模板方法模式在某些情况下可能会限制子类的灵活性,因为子类只能通过覆盖父类的抽象方法来改变某些步骤,无法改变算法的整体结构。

6. 模板方法模式的应用场景

  • 数据处理: 在数据处理过程中,存在一些固定的步骤(如读取文件、处理数据、输出结果等),可以使用模板方法模式将固定的步骤提取到父类中,而让子类负责特定的处理。
  • 游戏开发: 游戏中可能有很多固定的游戏流程(如玩家进入、战斗、结算等),可以用模板方法来控制这些固定的步骤,而让子类实现具体的战斗过程等。
  • 框架设计: 一些框架会提供一个模板方法,要求开发者只需实现其中的某些步骤,而不需要关心框架的整体结构。例如,Spring框架中的生命周期管理可以通过模板方法模式来实现。

7. 总结

模板方法模式通过定义算法的框架,将部分步骤的实现推迟到子类,使得子类能够在不改变算法结构的前提下,定制某些具体步骤。它是一个非常适用于处理具有固定执行顺序的算法的设计模式。模板方法模式提高了代码复用性和扩展性,但同时也带来了继承关系的复杂化,需要在合理的场景下使用。

模板方法模式(Template Method Pattern)详解 模板方法模式是一种行为型设计模式,它在父类中定义一个算法的骨架,而将算法的某些步骤延迟到子类中实现。模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法模式的核心思想是:“定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。抽象方法是在抽象类中声明但没有实现的方法,必须由子类提供实现。这些方法构成了算法中可变的部分。模板方法模式是一种强大的设计模式,它通过定义算法的骨架,将可变的部分延迟到子类中实现。 阅读详情

相关推荐

(保姆式教程:从下数据到画图)python如何利用EOF分析SSTA海温异常现象并画图

保姆式教程,教你如何利用python分析1979-2004年的太平洋地区的海温异常SSTA,并且绘制出空间模态和时间序列的图片。

shayuxing的博客 2万+

Java设计模式——模板方法模式【Template Method Pattern】

Java设计模式、模板方法模式、Template Method Pattern

scorpio的博客 3万+

[机器学习-回归实例] 李宏毅机器学习作业一:PM2.5 预测实例

[机器学习-回归实例] 李宏毅机器学习作业一:PM2.5 预测实例 简介   这是一个回归预测的实例,数据集来自李宏毅的《机器学习》课程的第一次作业,可以用来训练一个线性回归模型或者其他的回归模型,动手实践学习到的理论知识,在实践中去发现问题。这篇文章主要包括数据集的解释、数据的预处理过程及线性回归模型的代码实现这三个部分。由于这个数据集并不能直接使用,还需进行一些重构,为了对初学者更友好一些,我会提供重构完的可以读取后就直接使用的数据集,我也会提供 Matlab\rm MatlabMatlab 可直接使用

qq_27309515的博客 3574

设计模式精讲 Day 22:模板方法模式(Template Method Pattern)

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的框架,并在该框架中调用一些抽象方法或钩子方法,由子类来实现这些方法。这样,算法的结构保持不变,但具体的实现可以由不同的子类进行定制。模板方法模式的核心思想是将算法的骨架定义在父类中,将具体步骤延迟到子类中实现。通过模板方法,可以统一算法的执行流程,同时允许子类灵活调整部分步骤。模板方法模式适用于具有固定流程但部分步骤需定制的场景。通过完整 Java 示例,展示了模板方法模式的实现方式和实际应用。

在未来等你的专栏 1396

红米12C刷机避坑指南:NV数据损坏的修复与系统版本选择

本文提供了红米12C刷机过程中避免NV数据损坏的详细指南,涵盖系统版本选择、SP刷机工具使用和fastboot命令修复。重点分析了NV数据损坏的原因与表现,并给出通过工程固件和深度修复技巧解决基带未知、IMEI丢失等问题的实操方案,帮助用户安全完成刷机。

cuda7parallel的博客 1075

量化交易中的烂板策略:短线高频交易实战解析

量化交易通过算法模型实现自动化投资决策,其中短线高频交易是典型应用场景。从市场微观结构看,涨停板现象反映了资金博弈的动态平衡,而烂板策略正是捕捉涨停板短暂打开时的交易机会。该策略结合L2行情数据和Python量化框架,通过参数化规则识别特定形态的烂板股票,在风险可控前提下追求超额收益。实战中需严格遵循动态仓位管理和止损纪律,适用于A股市场短线交易。高频交易与量化分析技术的结合,为投资者提供了新的alpha挖掘工具。

weixin_30432579的博客 364

Spring框架之模板方法模式 (Template Method Pattern)

掌握模板方法模式,能够帮助开发者更好地设计灵活且可扩展的系统,是软件设计中常用的模式之一。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1726

YOLOv8改进 | 融合篇,YOLOv8主干改进融合网络之MobileNetV3+CA注意机制,助力涨点

MobileNetV3通过结合硬件感知网络架构搜索(NAS)和NetAdapt算法,通过新颖的架构改进进一步提升了性能。YOLOv8中的主干网络替换成MobileNetV3+引入CA注意机制

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1881

设计模式:模板方法模式(Template Method Pattern)

模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。

TechNomad的博客 1227

科研级YOLO26下采样革新:ContextGuided模块赋能,让特征降维兼具上下文感知的实战指南

在文件夹下新建,将上述类的代码写入其中。这一步是为了让YOLO26的代码架构能识别我们的自定义下采样模块。

LXY_LOVE36的博客 101

推荐一个直接用于项目开发的PID库!很好用,很稳定

关注、星标公众号,不错过精彩内容大家好,我是小麦。最近有朋友问到有没有现成的C语言PID库。当然有了!现在我就准备给大家安利一下了。一般同学会去某度上搜,看到各种各样版本的PID示例,或者...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 9025

设计模式 - 行为型 - 模板方法模式(Template Method Pattern)

模板方法模式是一种行为型设计模式,通过定义算法框架并延迟部分步骤到子类实现代码复用与扩展性。该模式包含抽象类(定义算法骨架)和具体子类(实现可变步骤)两个核心角色,具有代码复用、扩展性强和流程控制等优点,但也存在继承依赖性强等缺点。适用于多流程共享骨架、框架设计等场景,如Spring的JdbcTemplate和Java IO流等实际应用。相比策略模式,它更注重固定流程中的局部修改。该模式通过平衡父类流程控制和子类灵活扩展,成为构建可扩展架构的重要工具。

csdn_tom_168的博客 1135

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java设计模式 —— 【行为型模式】模板方法模式(Template Method Pattern) 详解

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

知唔猪的博客 1730

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

设计模式 -- 模板方法模式(Template Method Pattern)

模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说,模方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤这种类型的设计模式属于行为型模式。

xiaoyu❅的博客 2136

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java设计模式之模板方法模式(Template Method Pattern)

假设需要实现制作茶和咖啡的流程,两者步骤类似(烧水、冲泡、倒入杯子),但具体冲泡方法和添加调料不同。:框架定义通用流程,允许用户自定义部分步骤(如Servlet生命周期、JUnit测试流程)。:当多个类有相似的流程,但某些步骤实现不同时(如数据处理流程、文件解析流程)。:适用于具有固定流程但部分步骤需要定制的场景,如框架扩展、多态流程处理。,用于定义算法的骨架,将某些步骤的具体实现延迟到子类中。:通过父类定义算法流程,子类灵活实现具体步骤,实现代码复用和流程控制。方法为模板方法,由框架调用。

guanxin0206的博客 672

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

本文介绍23种经典设计模式之——模板方法模式(Template Method Pattern)的介绍及使用

Meteors.的博客 826

设计模式-20模板方法模式Template Method Pattern

模板方法模式是一种行为设计模式,它定义算法框架,将可变步骤延迟到子类实现。该模式通过抽象类定义算法骨架(模板方法),其中包含固定步骤和抽象/钩子方法。子类重写这些方法以改变特定步骤,而不修改算法结构。适用于有相同流程但部分步骤不同的场景,如数据处理、文档生成等。优点包括避免代码重复、提高复用性、便于扩展,但可能增加系统复杂度。典型实现包含抽象类定义模板方法和步骤,具体子类实现可变部分。

d3y1`5 81_09 815

JAVA设计模式——模板方法模式(Template Method Pattern)

概述 模板方法模式属于行为型模式。它由一个抽象类公开定义了执行它的方法的模板(执行的方式或顺序),它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。具体而言就是抽象类定义了某个方法的执行方式或者顺序,但是将该方法中的部分逻辑甚至全部逻辑实现交给具体的子类去实现,实现更高的抽象性。 模式中的角色 1、抽象类(AbstractClass):定义方法的模板,即方法的执行方式和顺序。 2、具体类(ConcreteClass):实现抽象类中的抽象方法,提供具体的执行逻辑。 应用举例 简单来

MitSuiTachi的博客 541

设计模式——模板方法模式( Template Method Pattern)

一、模板方法模式的定义 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 从定义可以看出,模板方法的本质是:封装算法。类图结构: 其中,templateMethod会调用抽象类中定义的一些抽象方法,或者已经实现(默认的具体实现)的方法(称之为“钩子”),子类(实现类)需要实现父类中的抽象方法,或者覆盖父类中已实现

蜗牛的专栏 804

Java (Template Method Pattern)模板方法模式详解

Java 设计模式之模板方法模式

小雨点的博客 697

模板方法模式(Template Method Pattern)

模板方法模式(Template Method Pattern)模板方法模式(Template Method Pattern)应用优点缺点使用场景具体项目使用场景模板方法模式的扩展最佳实践代码 模板方法模式(Template Method Pattern) 定义: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 解释说明: 模版...

bellus 668

JAVA设计模式之 模板方法模式【Template Method Pattern】

一、概述 二、适用chuangk

小吕丶Code阶区 3480

设计模式之模板方法模式Template Method Pattern-Java版

一、定义 The Template Method Pattern defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure. 模板方法模式定义了一种算法的框架,将部分步骤

qianmojl的博客 164
上一篇: Java设计模式 十九 责任链模式 (Chain of Responsibility Pattern)
下一篇: Java设计模式 二十一 中介者模式 (Mediator Pattern)
十方来财
十方来财 新星创作者: 编程框架技术领域 新星创作者: 编程框架技术领域
博客等级 码龄14年 8359粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十方来财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值