什么是模版方法模式,有哪些应用?

news2024/9/24 11:22:33

模板方法模式是一种行为设计模式,他的主要作用就是复用代码。在很多时候,我们的代码中可能会有-些公共的部分并且还有一些定制的部分,那么公共这部分就可以定义在一个父类中,然后将定制的部分实现在子类中。这样子类可以根据需要扩展或重写父类的方法,而不需要改变算法的结构。


我们通常会把模板方法模式和策略模式一起使用,因为当我们使用策略模式的时候,会把具体的策略实现在策略服务里面,但是还剩下一些通用的逻辑,就可以通过模板方法模式进行复用。

示例:

以上是一个抽象类,这个类中有一个具体的方法applyCoupon,其中定义了一个优惠券申请的具体实现,并且编排了多个其他的方法。


这就是一个典型的模板方法。我们可以基于这个抽象类来定义具体的实现:

 

 以上,就是两个具体的实现,分别继承Coupon抽象类,并且实现其中的部分方法就行了
这样我们在实际使用时,就可以直接用FixedAmountCoupon和PercentageCoupon类,并且直接调用他的applyCoupon方法就行了。如:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1644985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序如何使用svg矢量图标

微信小程序如何使用自定义SVG矢量图标 在微信小程序中,经常会用到小图标来装饰界面,我们常用的方法就是引用第三方的图标,但会存在收费或者找不到合适的图标,这时候我建议可以自行编写svg图标代码,就可以随心所欲的使…

JDK 17有可能代替 JDK 8 吗

不好说,去 Oracle 化是很多公司逐步推进的政策。 JVM 有 OpenJ9。很多公司可能会用 IBM 的版本。 JDK 这东西,能用就不会升级。 JDK 太基础了,决定了后面的很多 jar 的版本。 https://www.ossez.com/t/jdk-17-jdk-8/14102

【源码+文档+安装教程】校园社团信息管理系统

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了校园社团信息管理系统的开发全过程。通过分析校园社团信息管理系统管理的不足,创建了一个计算机管理校园社团信息管理系统的方案。文章介绍了校园社团…

GPU系列(六)-NVIDIA GPU 驱动安装

1. 安装驱动 1.1 查看系统是否识别显卡 lspci | grep -i vga03:00.0 VGA compatible controller: NVIDIA Corporation GP102 [TITAN X] (rev a1) 0a:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. G200eR2 (rev 01) 识别出显卡为 NVIDIA 的 TITAN X。 …

对比试验系列:Faster—RCNN配置及训练自己数据集

一、源码下载 GitHub - bubbliiiing/faster-rcnn-pytorch: 这是一个faster-rcnn的pytorch实现的库,可以利用voc数据集格式的数据进行训练。这是一个faster-rcnn的pytorch实现的库,可以利用voc数据集格式的数据进行训练。. Contribute to bubbliiiing/fa…

【LeetCode算法】1768. 交替合并字符串

提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案 一、题目 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另…

数据结构-二叉树-二叉搜索树

一、概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者具有以下性质的二叉树: 若它的左子树不为空,则左树上所有节点的值都小于根节点的值。 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。 它…

Transformer 解析 超级详细版

推荐学习视频 汉语自然语言处理-从零解读碾压循环神经网络的transformer模型(一)- 注意力机制-位置编码-attention is all you need_哔哩哔哩_bilibili 目录 首先下transformer和LSTM的最大区别是什么? 1.positional \ encoding, 即位置嵌入(或位置编码); 2 自注…

软考-系统集成项目管理中级--常见计算题考点汇总

1、决策树和期望货币价值(决策树、表)---风险管理 很简单的题目,如下题目我们不再讲解。相信大家听了基础课都会做如果不会做,建议再听下基础课。 有点难度的题目,请大家先做,如果有疑问,可以听课(课程私信…

力扣:931. 下降路径最小和

931. 下降路径最小和 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列(即…

全新神经网络架构KAN一夜爆火!

一种全新的神经网络架构KAN,诞生了! 与传统的MLP架构截然不同,且能用更少的参数在数学、物理问题上取得更高精度。 比如,200个参数的KANs,就能复现DeepMind用30万参数的MLPs发现数学定理研究。 不仅准确性更高&#…

smardatenR5C40无代码新版本正式发布!附功能详解

smardatenR5C40新特性在25日晚直播发布,新版本上线了两大全新功能,对四大已有能力进行了增强!没来得及参与的宝子们可以在“数睿数据视频号”中查看直播回放。 往下看具体详解,这些功能正被你所需要 一、全新能力发布 01数据报表…

图像识别——玩转YOLO网络

图像识别——玩转YOLO网络 YOLO,全称“You Only Look Once”,意为你只需要看一次,是一种快速、准确的目标检测算法。它由Joseph Redmon等人在2016年提出,其核心思想是将输入图像划分为SS个网格单元,每个网格预测B个边…

Day19 代码随想录打卡|字符串篇---反转字符串II

题目(leecode T541): 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小…

现代信号处理8_递归的最小二乘(CSDN_20240505)

递归的最小二乘大约出现在50年前。递归,就是在已经算出的结果的基础下,当新的数据到来时,不需要再对数据进行一次完整的运算,而是在已有结果的基础上做一些简单的调整,就能得到新的结果。使用递归的好处: …

矩阵式键盘的控制

键盘扫描是最 为常用的工作方式,扫描方式又可分为程序程扫描、定时扫描和中断扫描。程序扫描是指在 特定的程序位置段上安排键盘扫描程序读取键盘状态。定时扫描是指利用单片机内部或扩展 的定时器产生定时中断,在中断中进行键盘扫描的工作方式。中断扫描…

2024年第二十六届“华东杯”(B题)大学生数学建模挑战赛|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看华东杯 (B题)! 第一个问题…

链表经典面试题02--链表的带环问题

目录 引言 环形链表 题目描述: 思路分析: 代码展示: 面试中遇到的问题: 环形链表Ⅱ 题目描述: 思路分析: 代码展示: 面试中遇到的问题: 方法二: 随机链表的复制 题目描述: 思路分析: 代码展示: 小结 引言 这个专题专门讲解链表的带环问题,并且对面试有关链表带环…

华中科技大学雷达站部署

一:项目地址 GitHub - HUSTLYRM/HUST_Radar_2023: 华中科技大学狼牙战队 RoboMaster 2023赛季 雷达站 二:安装依赖 2.1创建虚拟环境 首先是程序是基于python3.8完成,所以创建虚拟环境的时候,选择3.8的虚拟环境 conda create -…

【Linux】详解用户态和内核态内核中信号被处理的时机sigaction信号自定义处理方法

一、用户态和内核态的理解 在操作系统中,用户态和内核态是两种主要的执行模式,它们代表了不同的访问级别和权限,用于确保系统的安全和稳定性。 1.1、用户态 用户态是操作系统中用户进程的运行状态。在这种状态下,进程只能访问受限…