当前位置: 首页 > news >正文

【设计模式-模板】

定义

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

UML图

在这里插入图片描述

组成角色

  • AbstractClass(抽象类):
    定义模板方法,包含算法的基本框架。它可能包含一些基本实现或抽象方法,供子类实现。
  • ConcreteClass(具体类):
    实现抽象类中的抽象方法,并可能覆盖模板方法中的某些步骤。具体类提供算法的具体实现。
  • templateMethod(模板方法):
    定义算法的骨架,调用各个步骤的方法。

代码

// AbstractClass
abstract class CaffeineBeverage {// 模板方法final void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();}// 基本方法void boilWater() {System.out.println("Boiling water");}// 抽象方法,子类必须实现abstract void brew();// 基本方法void pourInCup() {System.out.println("Pouring into cup");}// 抽象方法,子类可以选择实现abstract void addCondiments();
}// ConcreteClass1
class Coffee extends CaffeineBeverage {@Overridevoid brew() {System.out.println("Dripping coffee through filter");}@Overridevoid addCondiments() {System.out.println("Adding sugar and milk");}
}// ConcreteClass2
class Tea extends CaffeineBeverage {@Overridevoid brew() {System.out.println("Steeping the tea");}@Overridevoid addCondiments() {System.out.println("Adding lemon");}
}// Client code
public class TemplateMethodDemo {public static void main(String[] args) {CaffeineBeverage coffee = new Coffee();coffee.prepareRecipe();System.out.println();CaffeineBeverage tea = new Tea();tea.prepareRecipe();}
}

优点

  • 代码复用:将算法的公共部分放在抽象类中,提高了代码的复用性。
  • 灵活性:子类可以自由扩展或修改算法的某些部分,而不需要修改整个算法。
  • 清晰性:算法的结构在模板方法中清晰可见,易于理解。

缺点

  • 不灵活:子类必须遵循模板方法定义的算法结构,可能导致不必要的复杂性。
  • 类的数量增加:随着算法的扩展,可能会导致类的数量增加,从而增加管理的复杂性。

使用场景

  • 当有多个子类需要重用相同的算法时。
  • 当需要在不改变算法结构的前提下扩展算法时。
  • 当算法的步骤可以由不同的子类实现,但整体流程是固定的时。

相关文章:

【设计模式-模板】

定义 模板方法模式是一种行为设计模式,它在一个方法中定义了一个算法的骨架,并将一些步骤延迟到子类中实现。通过这种方式,模板方法允许子类在不改变算法结构的情况下重新定义算法中的某些特定步骤。 UML图 组成角色 AbstractClass&#x…...

小程序原生-列表渲染

1. 列表渲染的基础用法 <!--渲染数组列表--> <view wx:for"{{numList}}" wx:key"*this" > 序号&#xff1a;{{index}} - 元素&#xff1a;{{item}}</view> <!--渲染对象属性--> <view wx:for"{{userInfo}}" wx:key&q…...

JAVA认识异常

目录 1. 异常的概念与体系结构 1.1 异常的概念 1. 算术异常 2. 数组越界异常 3. 空指针异常 1.2 异常的分类 1. 编译时异常 2. 运行时异常 2.1 异常的处理 防御式编程 2.2 异常的捕获 2.3.1 异常声明throws 2.3.2 try-catch捕获并处理 2.3.3 finally 总结 1. 异常…...

2024年10月计划(工作为主,Ue5独立游戏为辅,)

我发现一点&#xff0c;就是工作很忙&#xff0c;比如中秋也在远程加班&#xff0c;周末有时也远程加班&#xff0c;国庆节甚至也差点去甲方工作。甚至有可能驻场。可见&#xff0c;小公司确实不能去。 好在&#xff0c;9月份时&#xff0c;通过渲染 除了上班时间外&#xff0…...

并发、并行和异步设计

译者个人领悟,一家之言: 并发和并行确实可以明确区分出来,因为cpu的速度非常快,在执行一个任务时经常要等其他组件,比如网络,磁盘等,如果一直串行等待这样就会造成很大的浪费. (就类似于烧水的同时,可以切菜,不用等烧水完成了才去切菜,我可以烧一会水,火生起来了水壶放上了,随…...

求职Leetcode题目(12)

1.只出现一次的数字 异或运算满足交换律 a⊕bb⊕a &#xff0c;即以上运算结果与 nums 的元素顺序无关。代码如下&#xff1a; class Solution {public int singleNumber(int[] nums) {int ans 0;for(int num:nums){ans^num;}return ans;} } 2.只出现一次的数字II 这是今天滴…...

【YashanDB知识库】如何配置jdbc驱动使getDatabaseProductName()返回Oracle

本文转自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7352676.html?templateId1718516 问题现象 某些三方件&#xff0c;例如 工作流引擎activiti&#xff0c;暂未适配yashandb&#xff0c;使用中会出现如下异常&#xff1a; 问题的风险及影响 …...

Hadoop三大组件之MapReduce(一)

Hadoop之MapReduce 1. MapReduce是什么 MapReduce是一个分布式运算程序的编程框架&#xff0c;旨在帮助用户开发基于Hadoop的数据分析应用。它的核心功能是将用户编写的业务逻辑代码与自带的默认组件整合&#xff0c;形成一个完整的分布式运算程序&#xff0c;并并发运行在一…...

SQL Server 分页查询的学习文章

SQL Server 分页查询的学习文章 一、SQL Server 分页查询1. 什么是分页查询&#xff1f;2. SQL Server 的分页查询方法2.1 使用 OFFSET 和 FETCH NEXT语法&#xff1a;示例&#xff1a; 2.2 使用 ROW_NUMBER() 方法语法&#xff1a;示例&#xff1a; 2.3 性能考虑3. 总结 一、S…...

告别PDF大文件困扰!4款PDF在线压缩工具助你轻松优化!

嘿&#xff0c;档案员小伙伴们&#xff0c;今天咱们来聊聊那些让咱们在档案堆里游刃有余的神器。这些工具啊&#xff0c;简直就是咱们档案员的得力助手&#xff0c;特别是在PDF压缩这块儿&#xff0c;简直就是神器中的神器&#xff01; 1、福昕转换大师 网址&#xff1a;http…...

Find My汽车钥匙|苹果Find My技术与钥匙结合,智能防丢,全球定位

随着科技的发展&#xff0c;传统汽车钥匙向智能车钥匙发展&#xff0c;智能车钥匙是一种采用先进技术打造的汽车钥匙&#xff0c;它通过无线控制技术来实现对车门、后备箱和油箱盖等部件的远程控制。智能车钥匙的出现&#xff0c;不仅提升了汽车的安全性能&#xff0c;同时也让…...

mysql学习教程,从入门到精通,SQL UNION 运算符(27)

1、SQL UNION 运算符 UNION 运算符在 SQL 中用于合并两个或多个 SELECT 语句的结果集&#xff0c;并默认去除重复的行。如果你想要包含所有重复行&#xff0c;可以使用 UNION ALL。下面是一个使用 UNION 运算符的示例&#xff0c;假设我们有两个表&#xff1a;employees_2020 …...

PKCE3-PKCE实现(SpringBoot3.0)

在 Spring Boot 3.0 JDK 17 的环境下&#xff0c;实现 PKCE 认证的核心步骤包括&#xff1a; 1&#xff09;引入依赖&#xff1a;使用 Spring Security OAuth 2.0 客户端进行授权码流程。 2&#xff09;配置 OAuth 2.0 客户端&#xff1a;在 Spring Boot 中配置 OAuth 2.0 客…...

C++详解vector

目录 构造和拷贝构造 赋值运算符重载&#xff1a; vector的编辑函数&#xff1a; assign函数&#xff1a; push_back和pop_back函数&#xff1a; insert函数&#xff1a; erase函数&#xff1a; swap函数&#xff1a; clear函数&#xff1a; begin函数&#xff1a; e…...

Redis实战--Redis的数据持久化与搭建Redis主从复制模式和搭建Redis的哨兵模式

Redis作为一个高性能的key-value数据库&#xff0c;广泛应用于缓存、消息队列、排行榜等场景。然而&#xff0c;Redis是基于内存的数据库&#xff0c;这意味着一旦服务器宕机&#xff0c;内存中的数据就会丢失。为了解决这个问题&#xff0c;Redis提供了数据持久化的机制&#…...

World of Warcraft [CLASSIC] Engineering 421-440

工程学421-440 World of Warcraft [CLASSIC] Engineering 335-420_魔兽世界宗师级工程学需要多少点-CSDN博客 【萨隆邪铁锭】421-425 学习新技能&#xff0c;其他都不划算&#xff0c;只能做太阳瞄准镜 【太阳瞄准镜】426、427、428、429 【随身邮箱】430 这个基本要做的&am…...

VUE3.5版本解读

官网&#xff1a;Announcing Vue 3.5 | The Vue Point 2024年9月1日&#xff0c;宣布 Vue 3.5“天元突破&#xff1a;红莲螺岩”发布&#xff01; 反应系统优化 在 3.5 中&#xff0c;Vue 的反应系统经历了另一次重大重构&#xff0c;在行为没有变化的情况下实现了更好的性能…...

spark计算引擎-架构和应用

一Spark 定义&#xff1a;Spark 是一个开源的分布式计算系统&#xff0c;它提供了一个快速且通用的集群计算平台。Spark 被设计用来处理大规模数据集&#xff0c;并且支持多种数据处理任务&#xff0c;包括批处理、交互式查询、机器学习、图形处理和流处理。 核心架构&#x…...

VUE 开发——AJAX学习(二)

一、Bootstrap弹框 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作 步骤&#xff1a; 引入bootstrap.css和bootstrap.js准备弹框标签&#xff0c;确认结构通过自定义属性&#xff0c;控制弹框显示和隐藏 在<head>部分添加&#xff1a…...

机器学习-KNN分类算法

1.1 KNN分类 KNN分类算法&#xff08;K-Nearest-Neighbors Classification&#xff09;&#xff0c;又叫K近邻算法。它是概念极其简单&#xff0c;而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想&#xff1a;如果一个样本在特征空间中的k个最…...

2026.5.12:三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗?

三台服务器,一台fastapi的websocket服务接口,一台代理fastapi服务的nginx,一台代理上一个nginx,能穿透websocket吗? 环境: - 三台服务器 1. 一台fastapi中有websocket接口的服务器:43.226.44.50 2. 一台代理上面1里面的fastapi服务的nginx:43.226.44.184 3. 一台代…...

3步精通UE4SS游戏Mod开发:从注入到实战完全指南

3步精通UE4SS游戏Mod开发&#xff1a;从注入到实战完全指南 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS UE…...

信息安全工程师-网络安全风险评估(上篇):框架、流程与量化基础

一、引言 &#xff08;一&#xff09;核心定位与定义 网络安全风险评估是信息安全管理体系的核心方法论&#xff0c;在软考信息安全工程师考试中属于信息安全管理模块的高频考点&#xff0c;占比约 8-10 分。其标准定义为&#xff1a;依据 GB/T 20984-2007《信息安全技术 信息…...

期末课程论文不用卷!虎贲等考 AI:真文献 + 规范稿,轻松高效拿高分

一到期末、结课、学分冲刺阶段&#xff0c;课程论文就成了大学生最集中的压力点。选题不会定、框架搭不起来、文献找不到、内容写得太空、格式一塌糊涂、查重还容易超标…… 随便一项都能让原本简单的作业变得耗时又费力。 很多同学用通用 AI 凑字数&#xff0c;结果文献假、逻…...

新手避坑指南:ICC LAB2 Design Planning 从加载设计到写出DEF的完整流程复盘

ICC LAB2 Design Planning全流程深度解析&#xff1a;从数据加载到DEF输出的实战避坑指南 当你第一次打开ICC工具面对LAB2的Design Planning任务时&#xff0c;是否感觉像被扔进了一个满是按钮的控制室&#xff1f;每个命令似乎都重要&#xff0c;但又不清楚它们如何串联成完整…...

Atlas机器人:人形设计、液压驱动与救灾场景下的技术权衡

1. 项目概述&#xff1a;Atlas&#xff0c;一个充满争议的工程里程碑2013年&#xff0c;当波士顿动力公司为DARPA&#xff08;美国国防高级研究计划局&#xff09;打造的Atlas机器人首次公开亮相时&#xff0c;它在工程技术社区引发的震动&#xff0c;远不止于其令人惊叹的行走…...

【研报 A114】2026人工智能时代企业技能管理数字化转型白皮书:AI驱动全生命周期闭环,迭代速度提升70%

摘要&#xff1a;智能汽车产业加速升级&#xff0c;车企正面临员工技能迭代的核心挑战&#xff0c;AI 原生技能管理成为转型关键。依托生成式 AI、多智能体等技术&#xff0c;全新的技能管理体系贯穿技能梳理、培养、评估、应用全生命周期&#xff0c;将技能转化为车企的核心无…...

从ShareGPT项目拆解现代全栈开发:Next.js、Serverless与Chrome扩展实战

1. 项目概述与核心价值如果你和我一样&#xff0c;经常在ChatGPT里进行一些天马行空的对话&#xff0c;从构思一部科幻小说的世界观&#xff0c;到一步步推导一个复杂的编程问题&#xff0c;再到让它扮演苏格拉底和你辩论哲学&#xff0c;这些对话记录本身就是宝贵的数字资产。…...

别再想当然!用AD628/INA等差分放大器做单端采集,必须搞懂的共模电压计算(附Excel工具)

差分放大器单端采集实战指南&#xff1a;共模电压计算与设计避坑 在工业传感器接口和医疗设备信号链设计中&#xff0c;差分放大器常被用于单端信号采集的场景。许多工程师习惯性地认为&#xff0c;只要将差分放大器的负输入端接地&#xff0c;就能轻松实现单端转差分功能。但实…...

观察Taotoken Token Plan套餐在长期项目中的成本控制效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 观察Taotoken Token Plan套餐在长期项目中的成本控制效果 对于需要长期、稳定调用大模型API的项目而言&#xff0c;成本的可预测性…...