【设计模式】第24节:行为型模式之“模板方法模式”
一、简介
模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。
模板模式有两大作用:复用和扩展。其中,复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。
二、优点
- 代码复用
- 统一算法框架
- 封装不变,扩展可变
三、适用场景
- 一次性实现算法的不变部分
- 集中公共行,避免代码重复
四、UML类图

五、案例
有下棋和足球两种游戏,它们的游玩过程类似,都是分为初始化、玩游戏、结束游戏三步。
package mainimport "fmt"type Game interface {InitializeGame()PlayGame()EndGame()
}func Play(game Game) {game.InitializeGame()game.PlayGame()game.EndGame()
}type Chess struct {
}func NewChess() *Chess {return &Chess{}
}func (c *Chess) InitializeGame() {fmt.Println("Initializing Chess Game")
}func (c *Chess) PlayGame() {fmt.Println("Playing Chess Game")
}func (c *Chess) EndGame() {fmt.Println("Ending Chess Game")
}type Football struct {
}func NewFootball() *Football {return &Football{}
}func (f *Football) InitializeGame() {fmt.Println("Initializing Football Game")
}func (f *Football) PlayGame() {fmt.Println("Playing Football Game")
}func (f *Football) EndGame() {fmt.Println("Ending Football Game")
}func main() {chess := NewChess()Play(chess)football := NewFootball()Play(football)
}
相关文章:
【设计模式】第24节:行为型模式之“模板方法模式”
一、简介 模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。 模板模式有两大作用:复用和扩展。其中,复用指的是&#…...
【考研数学】数学“背诵手册”(二)| 线代及概率论部分
文章目录 引言二、线代施密特正交化分块矩阵转置、逆、伴随之间的运算关于秩定义性质 三、概统常见分布的期望及方差 引言 这数一全部内容太多了,放在一篇文章里的话,要编辑就很困难,就把线代和概率放在这篇文章里吧。 二、线代 施密特正交…...
Android WMS——WindowState介绍(十三)
前面文章中的 addWindow 方法,首先获取了 DisplayContent,紧接着判断窗口的 type 类型并标记。然后获取 token 信息,且该信息是通过 DisplayContent 中的方法获取的。最后就是创建并保存 WindowState 信息。 一、简介 在窗口管理系统(Window Manager Service,WMS)中,Wi…...
C/C++网络编程基础知识超详细讲解第二部分(系统性学习day12)
懒大王感谢大家的关注和三连支持~ 目录 前言 一、UDP编程 UDP特点: UDP框架: UDP函数学习 发送端代码案例如下: 二、多路复用 前提讲述 select poll 三、图解如下 总结 前言 作者简介: 懒大王敲代码,…...
【教3妹学编程-算法题】117. 填充每个节点的下一个右侧节点指针 II
2哥 : 3妹,听说你昨天去面试了,怎么样啊? 3妹:嗨,别提了,让我回去等通知,估计是没有通知了, 还浪费我请了一天假。 2哥 : 你又请假了啊, 你是怎么跟你那个严厉的老板请假…...
window10 mysql8.0 修改端口port不生效
mysql的默认端口是3306,我想修改成3307。 查了一下资料,基本上都是说先进入C:\Program Files\MySQL\MySQL Server 8.0这个目录。 看看有没有my.ini,没有就新建。 我这里没有,就新建一个,然后修改port: […...
欧盟网络安全威胁:虚假与错误信息
如今,数字平台已是新闻媒体的主战地。社交网站、新闻媒体、甚至搜索引擎都是现在大多数人的信息来源。由于这些网站的运作方式是通过吸引人们来产生网站流量,这些抓人眼球的信息通常是推广广告,有些甚至没有经过审查。 国际现状 恶意攻击者现…...
006 Linux 进程的概念 | 获取进程的PID
前言 本文将会向您进程的概念,程序与进程的区别,如何获取进程的标识符-pid 文章重点 1.描述进程——PCB 进程与程序的区别 CPU对进程列表的处理 2.获取进程PID 描述进程-PCB 进程概念 课本概念:程序的一个执行实例或正在执行的程序 内核…...
时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测
时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 …...
《异常检测——从经典算法到深度学习》23 TimesNet: 用于常规时间序列分析的时间二维变化模型
zz# 《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Don…...
计算机网络(59)
1. OSI 的七层模型分别是?各自的功能是什么? 2. 为什么需要三次握手?两次不行? 3. 为什么需要四次挥手?三次不行? 4. TCP与UDP有哪些区别?各自应用场景? 5. HTTP1.0,1.1&…...
【CSS】CSS基础知识扫盲
1、 什么是CSS? CSS即层叠样式表 (Cascading Style Sheets). CSS 能够对网页中元素位置的排版进行像素级精确控制, 实现美化页面的效果. 能够做到页面的样式和结构分离 2、 CSS引入方式 CSS代码编写的时候有多种引入方式: 内部样式、外部样式、内联样…...
React中的状态管理
目录 前言 1. React中的状态管理 1.1 本地状态管理 1.2 全局状态管理 Redux React Context 2. React状态管理的优势 总结 前言 当谈到前端开发中的状态管理时,React是一个备受推崇的选择。React的状态管理机制被广泛应用于构建大型、复杂的应用程序…...
【优选算法系列】【专题九链表】第一节.链表常用技巧和操作总结(2. 两数相加)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、链表常用技巧和操作总结二、两数相加 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 一、链表常…...
上线Spring boot-若依项目
基础环境 所有环境皆关闭防火墙与selinux 服务器功能主机IP主机名服务名称配置前端服务器192.168.231.177nginxnginx1C2G后端服务器代码打包192.168.231.178javajava、maven、nodejs4C8G数据库/缓存192.168.231.179dbmysql、redis2C4G Nginx #配置Nginxyum源 [rootnginx ~]…...
pinia简单使用
新命令-创建vue3项目 vue create 方式使用脚手架创建项目,vue cli处理, vue3后新的脚手架工具create-vue 使用npm init vuelatest 命令创建即可。 在pinia中,将使用的组合式函数识别为状态管理内容 自动将ref 识别为stste,computed 相当于 ge…...
数据库进阶教学——数据库故障恢复(日志文件)
目录 一、日志简介 二、日志文件操作 1、查看日志状态 2、开启日志功能 3、查看日志文件 4、查看当前日志 5、查看日志中的事件 6、删除日志文件 7、查看和修改日志文件有效期 8、查看日志文件详细信息 三、删除的数据库恢复 一、日志简介 日志是记录所有数据库表结…...
Leetcode 73 矩阵置0
class Solution {//1.用矩阵的第一行和第一列来标记该行或该列是否应该为0,但是这样的话忽视了第一行或第一列为0的情况//2.用标记row0和column0来标记第一行或第一列是否该为0public void setZeroes(int[][] matrix) {int n matrix.length;int m matrix[0].length;boolean r…...
Rust学习日记(二)变量的使用--结合--温度换算/斐波那契数列--实例
前言: 这是一个系列的学习笔记,会将笔者学习Rust语言的心得记录。 当然,这并非是流水账似的记录,而是结合实际程序项目的记录,如果你也对Rust感兴趣,那么我们可以一起交流探讨,使用Rust来构建程…...
html各个标签的使用
一、标签的分类 1、单标签和双标签 1. 单标签:<img> img br hr 2. 双标签:<div></div> div span <a></a> h p a 2、按照标签属性分类 1. 块标签:自己独占一行 h1~h6 p div 2. 行内(内联)标签 …...
保姆级教程:在STM32F103上从零移植FreeModbus V1.6(RTU模式)
保姆级教程:在STM32F103上从零移植FreeModbus V1.6(RTU模式) Modbus协议作为工业自动化领域的"普通话",其开源实现FreeModbus凭借轻量级和可移植性成为嵌入式开发者的首选。本文将手把手带你在STM32F103C8T6开发板上完成…...
【Java Web学习 | 第九篇】JavaScript(3) 数组+函数
【Java Web学习 | 第九篇】JavaScript(3) - 数组与函数进阶(2026最新版) 本篇对数组和函数进行更深入、实用的讲解,这是 Java Web 开发中处理后端返回数据(JSON 数组/对象列表)和封装业务逻辑的核心技能。 由于你特别…...
深入理解fibjs Fiber机制:为什么它能提升并发性能
深入理解fibjs Fiber机制:为什么它能提升并发性能 【免费下载链接】fibjs JavaScript on Fiber (built on Chromes V8 JavaScript engine) 项目地址: https://gitcode.com/gh_mirrors/fi/fibjs 在JavaScript的世界中,处理高并发一直是开发者面临的…...
hadoop+spark+hive基于大数据的食谱分析与个性化推荐系统 美食推荐系统 美食可视化 大数据毕业设计
前言随着互联网技术的快速发展,人们获取信息的方式发生了巨大变化。特别是在食品领域,用户渴望获得更加个性化的推荐服务。大数据分析技术的出现为满足这一需求提供了可能。并据此提供精准的食谱推荐,从而提升用户体验。系统架构设计本项目 采…...
C++数组和指针的声明与使用指南
数组声明语法 在 C 中声明数组的语法为: 数据类型 数组名[数组大小]; 示例: int myArray[10]; // 声明一个包含 10 个整数的数组 数组初始化 声明时可直接初始化: int myArray[5] {10, 20, 30, 40, 50}; 部分初始化时,未指定值的…...
掌机影音革命:wiliwili跨设备媒体中心实战指南
掌机影音革命:wiliwili跨设备媒体中心实战指南 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端,目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili 在移…...
Windows Cleaner智能清理工具:系统优化与空间释放的全面解决方案
Windows Cleaner智能清理工具:系统优化与空间释放的全面解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 随着计算机使用时间的增长࿰…...
如何突破思维导图协作瓶颈?云端协同与知识管理新方案
如何突破思维导图协作瓶颈?云端协同与知识管理新方案 【免费下载链接】kityminder 百度脑图 项目地址: https://gitcode.com/gh_mirrors/ki/kityminder 在数字化办公环境中,思维导图作为梳理思路、规划项目的重要工具,其价值已得到广泛…...
保姆级教程:用OpenAI Whisper给视频自动生成字幕(附Python代码)
视频创作者必备:用Whisper打造高效字幕工作流 每次剪辑视频最头疼的就是加字幕?作为过来人,我完全理解那种对着时间轴逐帧调整的痛苦。直到发现Whisper这个神器,我的工作效率直接翻了三倍。今天就把这套全自动字幕生成方案完整分享…...
SPM12实战:从nii文件元数据解析到精准slice timing配置
1. 理解nii文件与slice timing的基础概念 当你第一次拿到fMRI的nii格式数据时,可能会被这个黑箱般的文件格式搞得一头雾水。nii文件就像是把整个大脑扫描过程打包成一个数字包裹,里面不仅包含三维的脑部图像数据,还隐藏着关键的扫描参数。我在…...
