设计模式学习——模板方法模式

从DC到DCG:手把手教你搭建物理感知综合流程(含DEF文件处理避坑指南) 本文详细介绍了从Design Compiler(DC)过渡到DC Topographical(DCT)和DC Graphical(DCG)的完整操作框架,特别针对DEF文件处理提供避坑方案。通过环境准备、工具升级、DEF文件处理、DCG综合配置等步骤,帮助开发者高效应对28nm以下工艺节点的物理感知综合挑战,显著提升时序收敛效率。 阅读详情



基本介绍

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

### 原理类图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020100223294732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0phdmFLb2JlQnJ5YW50,size_16,color_FFFFFF,t_70#pic_center) 说明(模板方法模式的角色及职责) 1. AbstractClass 抽象类,类中实现了模板方法,定义了算法的骨架,具体的子类需要去实现其他的抽象方法operation2,3,4 2. ConcreteClass实现抽象方法抽象方法operation2,3,4,以完成算法中特定子类的步骤。

模板方法模式类图实例:

在这里插入图片描述

模板方法模式代码实例:

SoyaMilk:作将公共的行为抽取到抽象类中方法实现,将具体多样的行为定义为抽象方法。

//抽象类,表示豆浆
public abstract class SoyaMilk {

    //模板方法,make,模板方法可以做成final,不让子类去覆盖。
    final void make() {
        select();
        addCondiments();
        soak();
        beat();
    }
    
    //选材料
    void select() {
        System.out.println("第一步:选择好的新鲜黄豆");
    }
    
    //添加不同的配料,抽象方法,子类具体实现
    abstract void addCondiments();

    //浸泡
    void soak() {
        System.out.println("第三步,黄豆和配料开始浸泡,需要3小时");
    }

    void beat() {
        System.out.println("第四步,黄豆和配料放到豆浆机去打碎");
    }
}

ReadBeanSoyaMilk 具体使用者

public class ReadBeanSoyaMilk extends SoyaMilk {
    @Override
    void addCondiments() {
        System.out.println("加入上好的红豆");
    }
}

PeanutSoyaMilk 具体使用者

public class PeanutSoyaMilk extends SoyaMilk {
    @Override
    void addCondiments() {
        System.out.println("加入上好的花生");
    }
}

测试用例

public class Client {
    public static void main(String[] args) {
        //制作红豆豆浆
        System.out.println("----制作红豆豆浆-----");
        ReadBeanSoyaMilk readBeanSoyaMilk = new ReadBeanSoyaMilk();
        readBeanSoyaMilk.make();
        System.out.println("----制作花生豆浆-----");
        PeanutSoyaMilk peanutSoyaMilk = new PeanutSoyaMilk();
        peanutSoyaMilk.make();
    }
}

模板方法的钩子方法

在模板方法模式的父类中,可以定义一个默认方法,它不做任何事且子类可视情况选择是否覆盖它,该方法称为“钩子”。

代码实例

通过新增的customerWantCondiments()可以选择是否覆盖addCondiments()方法

//抽象类,表示豆浆
public abstract class SoyaMilk {

    //模板方法,make,模板方法可以做成final,不让子类去覆盖。
    final void make() {
        select();
        if (customerWantCondiments()) {
            addCondiments();
        }
        soak();
        beat();
    }

    //选材料
    void select() {
        System.out.println("第一步:选择好的新鲜黄豆");
    }

    //添加不同的配料,抽象方法,子类具体实现
    abstract void addCondiments();

    //浸泡
    void soak() {
        System.out.println("第三步,黄豆和配料开始浸泡,需要3小时");
    }

    void beat() {
        System.out.println("第四步,黄豆和配料放到豆浆机去打碎");
    }

    //钩子方法,决定是否需要添加配料
    boolean customerWantCondiments() {
        return true;
    }
}

当customerWantCondiments()方法返回false的时候,则不会执行addCondiments()的重写。

public class PureSoyaMilk extends SoyaMilk {
    @Override
    void addCondiments() {
        //空实现
    }

    @Override
    boolean customerWantCondiments() {
        return false;
    }
}

模板方法模式在Spring框架应用的源码分析

在AbstractApplicationContext抽象类中,提供了refresh()方法作为模板方法。
在这里插入图片描述

在这里插入图片描述
点击postProcessBeanFactory(),其内部也是一个空实现,即为了方便子类重写的钩子方法。
在这里插入图片描述

点击onRefresh(),是一个预留的空实现方法,是为了方便子类重写父类的方法,相当于模板方法中的“钩子”方法。
在这里插入图片描述


模板方法模式在Spring框架应用的源码类图

在这里插入图片描述

从零到一使用PXE实现系统的无人值守自动化安装的保姆级教程 本文是《从零到一使用PXE实现系统的无人值守自动化安装的保姆级教程》亲自实操可用,本文从PXE是什么?有啥用?及其亲自实践出通过以国产银河麒麟系统为例从零到一的搭建出PXE服务器端(适用于其他系统),且测试了该搭建的PXE服务端自动化无人值守安装系统的保姆级实操教程。适用于大批量设备系统安装部署场景。 阅读详情

相关推荐

告别轮询!手把手教你用S32K3的FlexCAN Enhanced FIFO+DMA实现高效CAN FD数据接收

本文详细介绍了如何利用S32K3芯片的FlexCAN Enhanced FIFO与DMA组合方案,实现高效CAN FD数据接收,彻底告别传统轮询和中断模式。通过深度缓冲、智能过滤和DMA联动技术,该方案在5Mbps高负载场景下将CPU占用率从42%降至3%以下,显著提升系统实时性和吞吐量。

weixin_30906185的博客 502

15.模板方法模式

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

weixin_43719015的博客 531

MATLAB小白也能搞定!BCT脑网络分析工具箱安装与入门指南

本文为零基础用户提供了一份详尽的BCT脑网络分析工具箱安装与入门指南。从MATLAB环境配置、BCT工具箱下载与路径添加,到连接矩阵构建、节点度与聚类系数等基础指标计算,手把手带领神经科学研究者跨越编程门槛,快速掌握脑影像数据分析的核心流程。

threejs5artist的博客 1092

设计模式 ( 十五 ) 模板方法模式

一、概念 概念:模板方法模式,又叫模板模式,在抽象类中定义一个执行方法的模板,子类可以根据需要重写其中的方法,简单理解就是为其他子类提供一个算法框架。模板方法模式属于行为型模式,是借助于继承来实现的。 通用UML类图: 角色分析: 抽象模板(Abstract Template)角色:定义了模板方法以及整个实现的大体步骤,具体的子类需要实现其中的抽象方法;(抽象基类定义算法框架) 模...

weixiaohuai的博客 622

SAP-ABAP:SAP中如何查看系统表之间的关联关系?

在业务逻辑开发或者ALV开发过程中,我们通常要从系统中找出几个标准表之间的关联关系,有的是head与item,通过外键进行关联的关系。那么怎么去找到呢?以上就是具体如何产看系统表之间的关联关系的步骤,对于不同代码的业务顾问,也是必须要掌握的。

LinkStar的博客 2430

欧姆龙多PLC串行链接模式的应用

欧姆龙多PLC串行链接模式的应用 一、如何将两台CP1H进行串行PLC连接(PLC串行链接) 主机侧设定 从机侧设定 二、 如何实现编程通信 主机侧的【PC连接模式】为【全部】的时候 ① 主机会把自己的地址从3100开始,按照【链接字】设定的字数个数发送到每个从机的3100开始进行存储。 ② 从机会把自己的地址从31n0开始,按照主机侧参数【链接字】设定的字数个数发送到主机的31n0开始进行存储。 注:(n为从机的地址号,若从机号不连续,则该编号的地址将不被定义..

u014202847的博客 3087

java设计模式之——模板方法模式

typora-copy-images-to: img typora-root-url: img 模板方法模式 定义 模板方法模式(Template Method Pattern): 定义一个操作中算法的框架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模板方法是一种类行为型模式. 举例 请客吃饭: 点单 吃东西 买单 模板方法模式: •...

qq_36382679的博客 297

π_RL:解锁流匹配VLA强化学习后训练的关键技术与实战解析

本文深入解析了π_RL框架如何通过流匹配(flow matching)与强化学习(RL)的结合,解决视觉语言动作模型(VLA)在后训练中的关键挑战。详细介绍了Flow Noise和Flow SDE两大核心技术,以及它们在机器人控制任务中的实战效果,显著提升了模型的性能、数据效率和泛化能力。

weixin_29061531的博客 220

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

【设计模式】Java设计模式——模板方法模式

Dust_heart的博客 2313

YOLOv10改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 103

SillyTavern本地AI聊天平台部署与调优全指南

大型语言模型(LLM)作为当前人工智能领域的核心技术,通过其强大的自然语言理解和生成能力,正在深刻改变人机交互方式。其工作原理基于Transformer架构,通过海量数据训练,学习语言的统计规律与语义关联。这项技术的核心价值在于,它能够作为通用基础,赋能于多样化的下游应用,实现个性化的智能对话与内容创作。在工程实践中,如何高效、灵活且低成本地部署和利用这些模型,成为开发者与爱好者的关键需求。本地化部署方案,特别是结合如Ollama、KoboldCPP等推理引擎,提供了数据隐私保障与可控的硬件成本。Silly

weixin_42520448的博客 431

设计模式 c++版(4)——模板方法模式

定义: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 示例一:模板方法模式(通用版) 1. 类图10-3 2. 类图说明: AbstractClass 叫抽象模板,他的方法分为两类: 基本方法:即基本操作,是由子类实现的方法,并且在模板方法被调用。 模板方法:可以有一个或几个,一般是一个具体方法,即一个框架,实现对...

Jecklin_online的博客 473

【Zephyr驱动专题】01_深扒MPU6050陀螺仪寄存器

MPU6050作为最常用的6轴运动跟踪器件,其寄存器配置直接影响传感器性能和功能实现。本文将深入解析关键寄存器,并使用逻辑分析仪抓取信号进行分析。

zero的博客 1572

认真学习设计模式之模板方法模式(Template Method Pattern)

【1】概述 ① 模板方法 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。那么什么是模板方法呢?我们看下模板方法的定义。 一个具体方法而非抽象方法,其用作一个算法的模板; 在模板方法中,算法内的大多数步骤都被某个方法代表; 模板方法中某些方法是子类处理 需要由子类提供的方法,必须在超类中声明为抽象方法; 模板方法通常不能被覆盖,也就是使用final修饰; 如下实例,prepareRecipe就是一个模板方法。 public abstract class CaffeineBeverag

小小默:进无止境 779

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Design Pattern学习笔记之模板方法模式(the Template Method Pattern)

Design Pattern学习笔记之模板方法模式(the Template Method Pattern) 1.    引子--Whois? 在介绍过的设计模式中,我们一直在做封装的工作:封装对象的创建,封装方法调用,“封装”复杂接口,封装调用方与提供方接口的不兼容… 模板方法模式也是一种封装,它封装了包括好几个步骤的算法,子类可以按照实际需要实现算法中的特定步骤。 模板方法模式是对H

wqh807020的专栏 686

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

尚硅谷设计模式学习(14)---[模板方法模式(Template Method Pattern)]

尚硅谷传送门==>B站尚硅谷Java设计模式 ❤❤❤感谢尚硅谷❤❤❤ 最近开始计划学习一下设计模式了,加油!!! 目录模板方法模式 先看一个流程化 豆浆的制作问题 制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 那么就得引入模板方法模式. 模板方法模式 在一个上层的抽象类定义了执行它的方法的模板。子类可按需分配 重写方法实现,但是在调用

从零开始的异世界JAVA学习 303

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

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

学习笔记【23种设计模式-第十三节:Template Method Pattern模板方法模式】

Template Method Pattern模板方法模式 简述: 模板方法模式,又叫模板模式,在一个抽象类公开定义了执行他的方法的模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 简单说,模板方法模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定的步骤。 属于行为型模式。 角色 AbstractClass抽象类,类中实现了模板方法,定义了算法的股价,具体子类需要去实现,其他抽象方法operation2、3

qq_53273362的博客 216

python学习 - 设计模式 - 模板方法模式实例代码

【代码】python学习 - 设计模式 - 模板方法模式实例代码。

weixin_tank88921的博客 280

设计模式学习之——模板方法模式

设计模式学习之——模板方法模式,行为型设计模式,算法骨架固定,但实现步骤可以延迟在子类中实现

github_38727595的博客 1370

基于Python学习《Head First设计模式》第八章 模板方法模式

"""咖啡饮料"""print('将水煮沸')print('浸泡或冲泡')print('倒入杯子')print('添加调料')print('浸泡茶叶')print('添加柠檬')print('冲泡咖啡')print('添加奶和糖')(y/n)')print('制作茶...')print('\n制作咖啡...')"""运行结果:制作茶...将水煮沸浸泡茶叶倒入杯子添加柠檬制作咖啡...将水煮沸冲泡咖啡倒入杯子(y/n)y添加奶和糖"""

wzx77的博客 542

设计模式学习之模板方法模式

模板方法模式是行为型设计模式的一种,它在基类中定义了一个执行框架(类似于pipeline),允许子类覆写该框架中的子方法,使得子类可以在不改变算法结构的情况下重写算法的特定步骤。从这个描述中就能大概理解为什么叫模板方法模式了——基类中定义的执行框架就类似于一个模板,而子类可以通过重新实现其中的方法对模板中的功能进行自定义。

哆啦A瑶的博客 1178

java设计模式学习之【模板方法模式】

这篇教程不仅提供了模板方法模式的理论基础,还通过具体的Java代码示例展示了如何实现和应用这种模式。简单理解,通俗易懂

qq_33129875的博客 1651

设计模式学习笔记---模板方法模式template method pattern(Java版)

一、场景 客服到银行办理业务: 1、取号排队 2、办理具体现金/陷阱/转账/企业/个人/理财业务 3、给银行工作人员评分二、实质 它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。(处理步骤父类中定义好,具体实现延迟到子类中定义。) 三、示例 package com.lg

吃果冻不吐果冻皮 1298

学习设计模式《十五》——模板方法模式

 模板方法模式的本质是【固定算法骨架】

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1257

First head 设计模式学习c++实现------模板方法模式(Template method pattern)

模板方法模式: 在一个方法中定义一个算法的骨架,而将一些步骤推迟到子类中。 /* * CaffeineBeverage.h * * Created on: Aug 16, 2017 * Author: gwwu */#ifndef CAFFEINEBEVERAGE_H_ #define CAFFEINEBEVERAGE_H_ #include <iostream> usin

jackywgw的专栏 399

设计模式学习 — 模板方法模式

模板方法模式定义 定义一个操作中算法的框架,将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 从封装变化的角度去看,模板方法模式用于组件协作方面。 简单案例 在日常生活中,冲咖啡和冲茶叶的基本步骤是比较类似。 冲咖啡大致步骤: 1、煮水 2、冲泡咖啡 3、倒入杯中 4、加糖和牛奶 冲茶大致步骤: 1、煮水 2、冲泡茶叶 3、倒入杯中 4、加柠檬 class DrinkMaker { protected: virtual void Boil

欲盖弥彰1314 174
上一篇: 并发编程面试题(2020最新版)——修正版
下一篇: 设计模式学习——命令模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值