设计模式: 行为型之模板方法模式(15)

Java行为型设计模式-模板方法模式 模板方法模式是一种行为型设计模式,用于创建方法存根并将一些实现步骤推迟到子类。模板方法定义执行算法的步骤,并且可以提供默认实现,该实现可能对所有或部分子类通用。模板方法模式是软件工程中一个常用的设计模式,其定义了一个操作的算法骨架,将某些步骤推迟到子类中实现。模板方法使得子类可以不改变算法结构的情况下重定义某些步骤的具体实现。综上,在Java中,模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤延迟到子类中实现。这样,子类可以不改变算法结构的同时,重新定义这些步骤。模板方法模式的。 阅读详情

模板方法模式概述

  • 模板方法模式(Template Method Pattern)是一种行为设计模式
  • 它在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中
  • 模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤

模板方法模式实现

// 定义抽象类,它包含了算法的框架或者说模板方法
abstract class AbstractClass {
  // 模板方法,定义了算法的骨架
  public templateMethod(): void {
    this.primitiveOperation1();
    this.primitiveOperation2();
    console.log("The common steps...");
    this.primitiveOperation3();
  }

  // 原语操作,留给子类去实现
  protected abstract primitiveOperation1(): void;
  protected abstract primitiveOperation2(): void;
  protected abstract primitiveOperation3(): void;
}

// 具体子类,实现抽象类中未实现的原语操作
class ConcreteClass1 extends AbstractClass {
  protected primitiveOperation1(): void {
    console.log("ConcreteClass1 does something for primitiveOperation1.");
  }

  protected primitiveOperation2(): void {
    console.log("ConcreteClass1 does something for primitiveOperation2.");
  }

  protected primitiveOperation3(): void {
    console.log("ConcreteClass1 does something for primitiveOperation3.");
  }
}

class ConcreteClass2 extends AbstractClass {
  protected primitiveOperation1(): void {
    console.log("ConcreteClass2 does something different for primitiveOperation1.");
  }

  protected primitiveOperation2(): void {
    console.log("ConcreteClass2 does something different for primitiveOperation2.");
  }

  protected primitiveOperation3(): void {
    console.log("ConcreteClass2 does something different for primitiveOperation3.");
  }
}

// 使用示例
function main() {
  const concrete1 = new ConcreteClass1();
  concrete1.templateMethod();

  console.log("\n---\n");

  const concrete2 = new ConcreteClass2();
  concrete2.templateMethod();
}

// 输出:
// ConcreteClass1 does something for primitiveOperation1.
// ConcreteClass1 does something for primitiveOperation2.
// The common steps...
// ConcreteClass1 does something for primitiveOperation3.

// ---
// ConcreteClass2 does something different for primitiveOperation1.
// ConcreteClass2 does something different for primitiveOperation2.
// The common steps...
// ConcreteClass2 does something different for primitiveOperation3.
  • 在这个例子中:AbstractClass 是抽象类,它定义了算法的模板方法 templateMethod 和几个抽象方法 primitiveOperation1、primitiveOperation2 和 primitiveOperation3
  • 这些抽象方法需要子类去实现, ConcreteClass1 和 ConcreteClass2 是 AbstractClass 的具体子类,它们各自实现了父类中声明的抽象方法
  • 当调用 templateMethod 时,它按照固定的流程调用子类的原语操作方法,即便每个子类对原语操作的具体实现不同
  • 但算法的总体结构保持不变, 这就是模板方法模式的核心所在

模板方法模式优缺点


1 ) 优点

  • 封装不变部分
    • 模板方法模式在抽象类中封装了算法的不变部分,使得这些部分在子类中无需重复实现
    • 这有助于减少代码的冗余,提高代码的重用性
  • 定义算法骨架
    • 通过定义算法的骨架,模板方法模式确保了算法的主要结构在子类中保持一致
    • 这有助于维护代码的一致性和可读性
  • 扩展灵活
    • 子类可以通过实现抽象方法和覆盖钩子方法来扩展或修改算法的具体步骤,而无需改变算法的整体结构
    • 这使得模板方法模式具有很好的扩展性
  • 易于维护
    • 由于算法的主要结构在父类中定义,当需要修改算法时,只需在父类中修改相关部分,而无需修改所有子类
    • 这降低了维护成本,提高了系统的可维护性

2 )缺点

  • 可能导致子类膨胀

    • 如果算法中有很多可变步骤,每个步骤都需要一个抽象方法或钩子方法来实现,这可能导致子类数量过多,使得系统变得复杂
  • 可能违反“开闭原则”

    • 在某些情况下,如果子类需要添加新的步骤或修改现有步骤的顺序,可能需要修改抽象类中的模板方法
    • 这违反了“开闭原则”,即对扩展开放,对修改封闭
    • 虽然这种情况可以通过引入新的钩子方法或抽象方法来解决,但这也可能增加系统的复杂性
  • 过度使用可能导致代码结构不清晰

    • 如果过度使用模板方法模式,可能会导致代码结构变得不清晰,难以理解和维护
    • 因此,在使用模板方法模式时,需要权衡其优缺点,并根据具体需求进行适当的使用

3 )总结

  • 总的来说,模板方法模式是一种非常有用的设计模式,它可以帮助我们封装算法的不变部分,定义算法的骨架,并提供扩展的灵活性
  • 然而,在使用时也需要注意其可能带来的缺点,以避免过度使用或滥用该模式
C++设计模式22:模板方法模式 模板方法模式是一种行为型设计模式,它定义了一个操作中的算法框架,而将一些步骤延迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。该模式的实现方式是,将一系列操作分解成一系列步骤,其中有些步骤是固定的,有些步骤是可变的,然后定义一个抽象基类,其中包含一个算法框架,即将固定的步骤按照一定的顺序排列,形成一个模板方法。在模板方法中调用抽象方法,而这些抽象方法在子类中实现。 阅读详情

相关推荐

【软工方法论15】行为型设计模式模板方法模式全解析

模板方法模式是一种行为型设计模式,它通过定义算法的骨架(不变部分),将可变步骤延迟到子类实现。该模式通过抽象基类封装通用流程(如数据处理的打开→提取→分析→报告→发送),子类只需实现特定步骤(如不同文件类型的打开方式)。关键组件包括:final修饰的模板方法防止重写、抽象方法强制实现、钩子方法提供可选覆盖点。典型应用包括框架设计(如Spring的JdbcTemplate)、标准化流程(如不同部门工作流程)等,能有效消除重复代码,提高扩展性,尤其适用于流程固定但部分步骤需定制的场景。

通俗易懂学IT 142

15.模板方法模式

豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎,流程是固定的,只是其中的某一步骤是不一样的 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单, 很容易就想到这个方案,因此就直接使用,不再使用传...

weixin_43719015的博客 531

kaggle——销量预测的baseline(M5 Forecasting - Accuracy)

前言 在刚刚结束的kaggle比赛M5 Forecasting - Accuracy中,因为是第一次参加,笔者也是花了大量的时间和精力在上面,最终拿到一块银牌(所以我拿到了大学第一个考试挂科。。。求求电磁场老师高抬贵手给点平时分放我一马吧。。。早上看到kaggle成绩异常兴奋,中午考完直接爆炸=。=),当然运气占了很大因素,这次比赛private leadboard的shake up非常大,排名波动几千名都存在的。笔者运气不错,是向上的shake:)。这里总结一下销量预测的基本流程。 从下图可以看到这次比

weixin_43901221的博客 5433

设计模式深入浅出--15.模板方法模式及钩子方法及在JDK中的应用

模板方法模式 定义: 定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现 模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤 类型:行为型 适用场景: 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。 各子类中公共的行为被提取出来并集中到一个公共父类中,从而避免代码重复。 优点: 提高复用性 提高扩展性 符合开闭原则 缺点: 类数目增...

moxiaolin的博客 612

ARM Cortex平台NEON指令集优化实战指南

本文为ARM Cortex平台开发者提供了一份全面的NEON指令集优化实战指南。文章从NEON的SIMD架构原理讲起,详细介绍了开发环境搭建、NEON内联函数与自动向量化两种核心编程方法、关键数据类型与指令,并通过图像饱和运算、矩阵乘法等实战案例,深入解析了性能调优技巧与常见避坑指南,旨在帮助开发者充分释放ARM处理器的并行计算潜力。

weixin_29162439的博客 262

演化计算(蚁群算法、粒子群算法、遗传算法、演化规则......)

演化算法1.概念2.解决的问题 1.概念 传统算法(如梯度下降法、爬山法)根据导数的性质决定迭代的方向;而演化计算是一组解在一起协同作用产生一个最优解。 2.解决的问题 预测优化:演化计算(蚁群算法、粒子群算法、遗传算法等) 解的聚散、多样性:通过多次聚散,尽快得出最优解(某个解不合要求,要能够发散出去) ...

dear_jing的博客 4165

《设计模式修炼真经》15 — 模板方法模式

模板方法模式:定义一个操作中的算法的框架,将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义算法的某些特定步骤。 模板方法模式可以说是最简单的一个设计模式了,只需要一个抽象类的继承就可以实现,我们平时也一直在使用,但是你可能不知道这种设计模式的名字叫做模板方法模式。

大前端程序员的自我修养 3451

HMC7044调试指南与FPGA开发

最后,我们介绍了在FPGA开发中使用HMC7044的几个常见应用场景,包括时钟分配、时钟同步、高精度时钟生成和时钟域交叉。根据您的应用需求,您可以选择不同的时钟分配方案,例如使用PLL生成特定频率的时钟信号,或者通过分频器生成较低频率的时钟信号。HMC7044可以提供精确的时钟同步功能,确保各个FPGA板之间的时钟信号保持一致,从而实现可靠的数据传输和协同操作。HMC7044可以实现时钟域之间的交叉,通过生成和分配不同频率的时钟信号,使得不同时钟域的模块能够协同工作。FPGA开发中的HMC7044应用。

CqpFsharp的博客 3619

第四章:行为型模式(11种)《Java设计模式宝典:从入门到精通》

在这章中,我们将深入探索11种行为型模式,它们如同程序员的“秘密武器”,助力你在复杂的业务逻辑中游刃有余。 从策略模式到观察者模式,这些模式将如何在实际编程中变得无可替代?跟随胡广的脚步,看看他如何用这些模式重构项目中的购物车功能,将凌乱的代码转变为井然有序的系统。

程序员-杨胡广的博客 1312

PostgreSQL 异常排查:读取流时发生异常 (x80004005)

通过以上步骤,您应该能够解决在 .NET Core 中与 PostgreSQL 数据库进行交互时出现异常 (x80004005) 的问题。确保数据库连接正确,查询语句准确,并使用兼容的驱动程序版本。如有必要,可以捕获异常并查看详细的错误信息,以便更好地排查问题。在使用 .NET Core 开发应用程序时,如果在与 PostgreSQL 数据库进行交互时遇到异常,例如在读取数据流时发生异常 (x80004005),我们需要进行排查和修复。另外,还可以尝试捕获异常并打印异常信息,以便更好地了解问题所在。

XwlyVue的博客 1623

基于多智能体强化学习的轨道追逃博弈方法复现

本文提出了一种基于多智能体深度强化学习(MADDPG)的空间轨道追逃博弈方法。通过构建Actor-Critic网络架构,采用集中训练分布式执行的策略,使卫星群能够自主协调完成对非合作目标的围捕任务。代码实现了经验回放缓冲区、噪声探索机制和网络参数更新等核心功能,通过奖励函数设计平衡最短时间、燃料消耗和碰撞规避等目标。仿真结果表明该方法能有效利用数量优势,涌现出智能协同行为,为解决复杂空间博弈问题提供了新思路。

huanghm88的专栏 337

设计模式 15 · 模板方法模式

摘要 模板方法模式(Template Method)是一种行为型设计模式,它将算法的固定骨架定义在父类中,而将可变的具体步骤留给子类实现。与策略模式(替换整个算法)不同,模板方法通过继承实现流程复用,确保执行顺序不变的同时允许特定步骤定制。典型应用场景如订单处理流程(校验、计算金额等固定步骤),其中公共逻辑由父类统一处理,差异部分由子类实现。关键机制包括:1)final修饰的模板方法防止骨架被修改;2)钩子方法(Hook Method)提供可选扩展点。该模式体现了"好莱坞原则"(父类控制流程,回调子类方法)

记录后端技术的深水区:MySQL、并发、JVM、分布式。原理为主,实战为辅,能少踩一个坑是一个。 464

零基础实战:用 Docker 和 vLLM 本地部署 bge-reranker-v2-m3 重排序模型

本文介绍了如何利用Docker容器和vLLM推理框架在本地部署BAAI开发的bge-reranker-v2-m3文本排序模型。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 5974

C++ 设计模式——模板方法模式

模板方法模式是一种行为设计模式,它定义了一个算法的骨架,而将一些步骤延迟到子类中。通过这种方式,模板方法允许子类在不改变算法结构的情况下重新定义算法的某些特定步骤。

慢慢记录,慢慢更新。 1225

电池管理系统(BMS)技术全景解析:从基础原理到智能未来

《BMS技术演进与核心功能解析》摘要: 电池管理系统(BMS)作为新能源系统的智能中枢,已从基础保护电路发展为具备预测能力的智能系统。文章系统梳理了BMS三大技术时代:1.0保护时代(1990-2000)采用硬件保护电路;2.0智能时代(2000-2020)引入SOC算法;3.0云脑时代(2020后)实现AI预测。详细解析了BMS三大核心模块:AFE感知系统(±2mV精度)、功率驱动模块(10μs级保护)和均衡技术(效率提升至85%),并对比了主动/被动均衡技术差异。同时阐释了SOC/SOH等关键参数定义与

bother3000的博客 2986

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java中的几种设计模式:行为型模式

Java设计模式: (一)Java中的几种设计模式:创建型模式,结构型模式 (二)Java中的几种设计模式:行为型模式 行为型模式共十一种,这十一种之间的关系见下图: 行为型模式.png 一、策略模式 策略模式是将实现某个功能的一系列算法和策略封装起来,让算法或策略的修改不影响调用。接下来我们实现一个简单的计算器功能,提供加、减、乘功能,代码如下: 计算器接口: public ...

liinux-Talk is cheap,show me the code. 704

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【大话设计模式-15】模板方法模式(普通方法与钩子方法案例解析)

文章目录1 豆浆制作问题2 模板方法模式基本介绍3 模板方法模式原理类图3.1 模板方法模式的原理类图4 模板方法模式解决豆浆制作问题5 模板方法模式的钩子方法6 模板方法模式在 Spring 框架应用的源码分析7 模板方法模式的注意事项和细节 1 豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 请使用 模板方法模式

计忆芳华的博客 737

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

设计模式之模板方法模式

在上述示例中, prepareBeverage 方法就是模板方法,定义了制作饮料的整体流程,而 brew 和 addCondiments 则是留给子类去具体实现的步骤。在模板方法模式中,一个抽象类公开定义了执行某种算法的模板框架。这个框架中的某些步骤是抽象的,由子类去实现。而模板方法本身则定义了算法的结构,把一些特定步骤的实现延迟到子类中。2. 扩展性:子类可以根据需要重写特定的步骤,而不影响整体算法的结构。3. 封装性:将算法的实现细节封装在子类中,保持了父类的简洁和稳定。

alankuo的专栏 445

编程-笔记三:行为型设计模式-小结

行为型设计模式是一组用于描述类和对象如何交互以及如何分配职责的设计模式。它们通常涉及算法的封装、行为的抽象化以及对象间通信机制的设计。

qq_45831414的博客 1000

设计模式(13):模板方法模式

实现一个功能时,整体步骤很固定,但是,某些部分易变。易变部分可以抽象出来,供子类实现。

qq_25432245的博客 998

Android开发中的11种行为型设计模式深度解析

解耦对象间的依赖:如观察者模式、中介者模式封装算法和操作:如策略模式、模板方法模式管理状态和流程:如状态模式、责任链模式支持扩展和变化:如访问者模式、命令模式在实际开发中,应根据具体需求选择合适的模式,避免过度设计。同时,结合Kotlin语言特性(如高阶函数、扩展函数)可以简化部分模式的实现。最佳实践建议理解模式解决的问题,而非机械套用优先考虑代码可读性和可维护性结合Android组件生命周期设计编写单元测试验证模式实现设计模式是工具而非目标,合理运用才能构建出高质量、易维护的Android应用。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 892

设计模式:行为型模式(三)

感言:今天这篇行为型设计模式写完了,就写了三篇设计模式相关文章了,完成了设计模式的部分学习了。每一个设计模式自己都写了一个很小的Demo,当然这些Demo也是参考了很多其他人写的博客以及一些书籍汇总产生的。总体来说给我的感觉是我面向对象的抽象能力有了很大的提升。对于接口,继承,封装等有了更加深入的理解,但是坦率的讲自己对设计模式的理解还不够强,还需得有更多的实践来将理论上的东西进行进一步的落实。

Standup-jb的博客 1650

行为型设计模式的Python实践指南

行为型设计模式的Python实践指南 本文深入探讨了四种重要的行为型设计模式在Python中的实践应用:观察者模式、策略模式、模板方法模式和访问者模式。文章通过详细的代码示例、模式对比和实际应用场景分析,展示了如何在Python项目中优雅地实现这些模式。每种模式都涵盖了核心概念、实现原理、优势分析以及高级应用技巧,为开发者提供了全面的实践指南。 观察者模式:数据变更通知回调机制 观察者模式(Obs...

gitblog_00282的博客 606

15.架构基础-JAVA设计模式-行为型-模板方法模式

模板方法模式定义及结构: 定义:所谓模板方法模式就是定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种行为型模式模板方法充分运用了java面向对象编程思想,使用java类的继承后,方法具有传播性特征,所谓传播性即子类继承父类哦,父类的方法会传播给子类。根据此特性我们可以将许多通用代码封装在父类中,不相同的代码放入子类中,因此可将不同部分声明一个抽象方法,在子类中实现具体业务逻辑 模板方法模式结构: 抽象公共类:Common

lijunliang2017的博客 167

15.TemplateMethod-模板方法模式

TemplateMethod 模板方法模式 模板方法模式: 定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。 模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。 通过使用模板方法模式,可以将一些复

龙叔的博客 914

Java 与设计模式(15):模板方法模式

模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架(也就是大致的步骤和流程),而将一些具体步骤的实现延迟到子类中。这样,子类可以不改变算法的结构即可重新定义算法的某些特定步骤。

暗星涌动 1416
上一篇: 设计模式: 行为型之责任链模式(14)
下一篇: 设计模式: 行为型之策略模式(16)
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Wang's Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值