信用门户网站建设专家评价/搜狐视频

信用门户网站建设专家评价,搜狐视频,uc浏览器手机网页版,抖音小程序怎么入驻目录 一、 啥是模板方法模式?二、 为什么要用模板方法模式?三、 模板方法模式的实现方式四、 模板方法模式的优缺点五、 模板方法模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式&a…

在这里插入图片描述

目录

    • 一、 啥是模板方法模式?
    • 二、 为什么要用模板方法模式?
    • 三、 模板方法模式的实现方式
    • 四、 模板方法模式的优缺点
    • 五、 模板方法模式的应用场景
    • 六、 总结

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解享元模式请看: (十 二)趣学设计模式 之 享元模式!
✨更多请看个人主页: 码熔burning

这篇文章带你详细认识一下设计模式中的模版方法模式

一、 啥是模板方法模式?

想象一下,你想要制作一杯咖啡 ☕。 制作咖啡的步骤大致相同:烧水 💧、冲泡咖啡 ☕、倒入杯中 🥛、加入调料 🍬。 但是,不同的咖啡,加入的调料可能不同 (比如:拿铁加牛奶,美式加糖)。

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

简单来说,就是定义一个模板,规定了算法的执行流程,具体的实现细节由子类来完成! 📝

  • 你有一系列相似的算法,它们的执行流程基本相同: 就像制作不同口味的咖啡 ☕!
  • 你想让子类可以灵活地定制算法的某些步骤: 就像不同的咖啡可以加入不同的调料 🍬!
  • 你想避免代码重复: 就像你不想在每个咖啡类中都重复编写烧水、冲泡咖啡、倒入杯中的代码 💧☕🥛!

二、 为什么要用模板方法模式?

用模板方法模式,好处多多 👍:

  • 代码复用: 将公共代码提取到父类中,减少代码重复 ♻️!
  • 控制算法流程: 父类控制算法的执行流程,子类只能定制特定的步骤 📝!
  • 提高扩展性: 可以方便地添加新的算法,只需要创建新的子类即可 ➕!
  • 符合开闭原则: 可以在不修改父类代码的情况下,扩展算法的功能 ✅!

三、 模板方法模式的实现方式

模板方法模式主要包含以下几个角色:

  • AbstractClass(抽象类): 定义抽象的模板方法,以及一些具体的辅助方法。 ☕ (比如:咖啡基类)
  • ConcreteClass(具体类): 实现抽象类中的抽象方法,完成算法的特定步骤。 ☕ (比如:拿铁咖啡、美式咖啡)

代码示例:

// 抽象类:咖啡
public abstract class Coffee {// 模板方法:制作咖啡public final void makeCoffee() {boilWater(); // 烧水brewCoffee(); // 冲泡咖啡pourInCup(); // 倒入杯中addCondiments(); // 加入调料}// 具体方法:烧水private void boilWater() {System.out.println("烧水");}// 抽象方法:冲泡咖啡protected abstract void brewCoffee();// 具体方法:倒入杯中private void pourInCup() {System.out.println("倒入杯中");}// 抽象方法:加入调料protected abstract void addCondiments();
}// 具体类:拿铁咖啡
public class LatteCoffee extends Coffee {@Overrideprotected void brewCoffee() {System.out.println("冲泡拿铁咖啡");}@Overrideprotected void addCondiments() {System.out.println("加入牛奶");}
}// 具体类:美式咖啡
public class AmericanCoffee extends Coffee {@Overrideprotected void brewCoffee() {System.out.println("冲泡美式咖啡");}@Overrideprotected void addCondiments() {System.out.println("加入糖");}
}// 客户端
public class Client {public static void main(String[] args) {Coffee latte = new LatteCoffee(); // 创建拿铁咖啡latte.makeCoffee(); // 制作拿铁咖啡System.out.println("---");Coffee american = new AmericanCoffee(); // 创建美式咖啡american.makeCoffee(); // 制作美式咖啡}
}

分析:

  • Coffee 是抽象类,定义了制作咖啡的模板方法 makeCoffee(),以及一些具体的辅助方法 boilWater()pourInCup(),还有一些抽象方法 brewCoffee()addCondiments()
  • LatteCoffeeAmericanCoffee 是具体类,实现了抽象类中的抽象方法,完成了冲泡咖啡和加入调料的特定步骤。

输出结果:

烧水
冲泡拿铁咖啡
倒入杯中
加入牛奶
---
烧水
冲泡美式咖啡
倒入杯中
加入糖

四、 模板方法模式的优缺点

优点:

  • 代码复用 ♻️!
  • 控制算法流程 📝!
  • 提高扩展性 ➕!
  • 符合开闭原则 ✅!

缺点:

  • 增加了系统的复杂度 😫!
  • 抽象类定义了算法的骨架,子类必须遵循这个骨架,灵活性受到限制 ⛓️!
  • 每个不同的实现都需要定义一个子类,导致类的数量增加 📈!

五、 模板方法模式的应用场景

  • 你有一系列相似的算法,它们的执行流程基本相同: 就像制作不同口味的咖啡 ☕!
  • 你想让子类可以灵活地定制算法的某些步骤: 就像不同的咖啡可以加入不同的调料 🍬!
  • 你想避免代码重复: 就像你不想在每个咖啡类中都重复编写烧水、冲泡咖啡、倒入杯中的代码 💧☕🥛!
  • 数据库访问: 数据库访问的流程通常是:建立连接、执行查询、处理结果、关闭连接。 可以使用模板方法模式来定义这个流程,具体的查询语句和结果处理由子类来完成。
  • Servlet处理: Servlet处理请求的流程通常是:接收请求、处理请求、发送响应。 可以使用模板方法模式来定义这个流程,具体的请求处理由子类来完成。

六、 总结

  • 模板方法模式就像定义一个模板,规定了算法的执行流程,具体的实现细节由子类来完成! 📝
  • 主要包含抽象类和具体类两个角色! 🎭
  • 优点是代码复用、控制算法流程、提高扩展性、符合开闭原则! 👍
  • 缺点是增加复杂度、灵活性受到限制、类的数量增加! 👎
  • 适用于有一系列相似的算法,它们的执行流程基本相同,且需要让子类灵活地定制算法的某些步骤的场景! 🎯

希望这篇文章能让你彻底理解模板方法模式! 💯 祝你学习愉快! 😄
看完请看:(十 四)趣学设计模式 之 策略模式!

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

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

相关文章

模型和数据集的平台之在Hugging Face上进行模型下载、上传以及创建专属Space

模型下载 步骤: 注册Hugging Face平台 https://huggingface.co/ 新建一个hf_download_josn.py 文件 touch hf_download_josn.py 编写hf_download_josn.py文件 import os from huggingface_hub import hf_hub_download# 指定模型标识符 repo_id "inter…

【弹性计算】弹性裸金属服务器和神龙虚拟化(二):适用场景

弹性裸金属服务器和神龙虚拟化(二):适用场景 1.混合云和第三方虚拟化软件部署2.高隔离容器部署3.高质量计算服务4.高速低时延 RDMA 网络支持场景5.RISC CPU 支持6.GPU 性能无损输出 公共云服务提供商推出 弹性裸金属服务器,很显然…

kan与小波,和不知所云的画图

文章目录 小波应用范围与pde小波的名字 画图图(a):数值解向量 \( u \)图(b):数值解向量 \( v \)结论图4 小波 在你提供的代码中,小波变换(Wavelet Transform)被用于 KANLinear 类中。具体来说,小波变换在 …

细说STM32F407单片机RS485收发通信实例及调试方法

目录 一、硬件配置 1、RCC、DEBUG、CodeGenerator 2、USART3 3、 RS485_DIR 4、NVIC 二、软件设计 1、RS485的收发控制 2、main.c 三、运行调试 1、修改RS485_DIR为SET后需要延迟 2、向串口助手发送的数据不能太长 MCU上的串口UART(USART)是…

PDF工具 Candy Desktop(安卓)

PDF Candy Desktop(安卓) 今天给大家分享一个电脑端的PDF工具,里面的功能很多,主要涉及PDF编辑、转换等,不仅超级好用,而且免费!剩下就不说了,兄弟们自行下载体验吧! 「…

基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

golang安装(1.23.6)

1.切换到安装目录 cd /usr/local 2.下载安装包 wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz 3.解压安装包 sudo tar -C /usr/local -xzf go1.23.6.linux-amd64.tar.gz 4.配置环境变量 vi /etc/profile export PATH$…

【新手入门】SQL注入之盲注

一、引言 在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办? 例如应用程序返回到一个"通用的"的页面,或者重定向一个通用页面(可能为网站首页)。这时,我们之前学习的SQL注入的办法就无法使用了。这种情况我们称之为无…

DeepSeek-R1 大模型实战:腾讯云 HAI 平台 3 分钟极速部署指南

引言:为什么选择 DeepSeek-R1? 近期,国产大模型 DeepSeek-R1 因其低成本、高性能的特点在全球 AI 领域引发热议。根据 Sensor Tower 数据,其发布仅 18 天便斩获 1600 万次下载量,远超 ChatGPT 同期表现。而腾讯云推出…

【Pytest】setup和teardown的四个级别

文章目录 1.setup和teardown简介2.模块级别的 setup 和 teardown3.函数级别的 setup 和 teardown4.方法级别的 setup 和 teardown5.类级别的 setup 和 teardown 1.setup和teardown简介 在 pytest 中,setup 和 teardown 用于在测试用例执行前后执行一些准备和清理操…

使用Docker将ros1自定义消息通过rosjava_bootstrap生成jar包

文章目录 预准备环境rosjava_bootstrap坏消息好消息 环境安装docker安装rosjava_bootstrap仓库rosjava_center仓库修改rosjava_bootstrap代码拉取docker镜像放置自己的自定义消息 启动docker编译 预准备环境 rosjava_bootstrap rosjava_bootstrap是将自定义的ROS消息生成java…

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中,实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送,还是多人协作工具,WebSocket 都是实现高效实时通信的最佳选择之一。本…

React底层原理详解

React中Element&Fiber对象、WorkInProgress双缓存、Reconcile&Render&Commit、第一次挂载过程详解 在面试中介绍React底层原理时,需遵循逻辑清晰、层次分明、重点突出的原则,结合技术深度与实际应用场景。以下是结构化回答模板:…

解锁浏览器内置API,助力跨标签/跨页面数据通信

1 BrodcastChanner 概念 BroadcastChannel接口表示给定源的任何浏览上下文都可以订阅的命名频道。它允许同源的不同浏览器窗口、标签页、frame 或者 iframe 下的不同文档之间相互通信。消息通过message事件进行广播,该事件在侦听该频道的所有BroadcastChannel对象上…

Mysql-如何理解事务?

一、事务是什么东西 有些场景中,某个操作需要多个sql配合完成: 例如: 李四这个月剩下的前不够交房租了,找张三借1000元急用: (1)给张三的账户余额 减去1000元 updata 账户表 set money money -…

Windows对比MacOS

Windows对比MacOS 文章目录 Windows对比MacOS1-环境变量1-Windows添加环境变量示例步骤 1:打开环境变量设置窗口步骤 2:添加系统环境变量 2-Mac 系统添加环境变量示例步骤 1:打开终端步骤 2:编辑环境变量配置文件步骤 3&#xff1…

蓝桥杯 之 填空题-位运算与循环

文章目录 循环握手问题门牌制作-循环小球反弹幸运数艺术与篮球跑步 位运算3个1美丽的2024 位运算 可以关注这个Lowbit(x) 如何判断最低位是否是1? num&1 1就说明num最低位是1 循环 循环 握手问题 握手问题 思路分析: 可以直接计算出来&#xff…

OAK相机的抗震性测试

在工业环境中,双目视觉相机必须具备与工作环境同等的坚固性。鉴于部分客户会将我们的相机应用于恶劣环境(例如安装在重型机械上),我们依据EN 60068-2-6:2008标准对相机进行了振动耐受性测试。 测试涉及的相机型号包括&#xff1a…

Express MVC

1. 安装依赖 npm init -y npm install express npm install --save-dev typescript ts-node ejs types/node types/express tsc --init 2. 项目目录结构如下,没有的手动创建 /my-app/src/modelsuser.ts/viewsindex.ejsuserList.ejs/controllersuserController.ts…

apache-maven-3.2.1

MAVEN_HOME D:\apache-maven-3.2.1 PATH D:\apache-maven-3.2.1\bin cmd mvn -v <localRepository>d:\localRepository</localRepository> setting.xml <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Soft…