C++ 设计模式(4. 建造者模式)
- 建造者模式(也被成为生成器模式),是一种创建型设计模式,软件开发过程中有的时候需要创建很复杂的对象,而建造者模式的主要思想是将对象的构建过程分为多个步骤,并为每个步骤定义一个抽象的接口。具体的构建过程由实现了这些接口的具体建造者类来完成。同时有一个指导者类负责协调建造者的工作,按照一定的顺序或逻辑来执行构建步骤,最终生成产品。
- 基本结构
建造者模式有下面几个关键角色:- 产品Product:被构建的复杂对象, 包含多个组成部分。
- 抽象建造者Builder: 定义构建产品各个部分的抽象接口和一个返回复杂产品的方法getResult
- 具体建造者Concrete Builder:实现抽象建造者接口,构建产品的各个组成部分,并提供一个方法返回最终的产品。
- 指导者Director:调用具体建造者的方法,按照一定的顺序或逻辑来构建产品。指导者类来控制构建产品的顺序和步骤。
- 使用场景
使用建造者模式有下面几处优点:- 使用建造者模式可以将一个复杂对象的构建与其表示分离,通过将构建复杂对象的过程抽象出来,可以使客户端代码与具体的构建过程解耦。
- 同样的构建过程可以创建不同的表示,可以有多个具体的建造者(相互独立),可以更加灵活地创建不同组合的对象。
- 对应的,建造者模式适用于复杂对象的创建,当对象构建过程相对复杂时可以考虑使用建造者模式,但是当产品的构建过程发生变化时,可能需要同时修改指导类和建造者类,这就使得重构变得相对困难。
- 建造者模式在现有的工具和库中也有着广泛的应用,比如JUnit 中的测试构建器TestBuilder就采用了建造者模式,用于构建测试对象。
相关文章:
C++ 设计模式(4. 建造者模式)
建造者模式(也被成为生成器模式),是一种创建型设计模式,软件开发过程中有的时候需要创建很复杂的对象,而建造者模式的主要思想是将对象的构建过程分为多个步骤,并为每个步骤定义一个抽象的接口。具体的构建…...
Arbitrum 和 Optimism Layer 2 扩展方案对比
Arbitrum 和 Optimism 对比分析 Arbitrum 和 Optimism 是两个以太坊 Layer 2 扩展方案,它们都使用了 Optimistic Rollup 技术来提升以太坊的可扩展性并降低交易成本。虽然它们有着相似的目标,但在架构设计、性能表现和费用结构上各有特点。 一、架构与…...
热门的蓝牙耳机中,哪种类型更受欢迎?四款热度高的开放式耳机
在如今的耳机市场中,开放式耳机异军突起,成为了众多消费者的新宠。如果你还在为传统入耳式耳机带来的不适而烦恼,那么开放式耳机绝对值得你一试。它不仅能让你在享受音乐的同时,依然可以清晰感知周围环境,保障你的安全…...
基于web的亚热带常见自然林病虫害识别系统——总结与展望
文章目录 一、前言二、总结三、展望参考文献致谢一、前言 这个系列也迎来了结尾,最后说一些碎碎念… 二、总结 本文首先简要介绍了卷积神经网络的基本原理,以及在亚热带常见自然林植物识别领域的研究应用现状。 其重点研究了卷积神经网络在亚热带常见自然林植物叶片病害识…...
其他自动重试的注解
除了 Retryable 注解之外,Spring 提供了其他注解用于自动重试方法,主要包括以下几个注解: 1. Recover Recover 注解用于定义重试次数耗尽后执行的恢复方法。当 Retryable 注解的重试次数达到上限时,Recover 方法会被调用。这通常…...
宠物空气净化器哪款能吸毛?希喂、米家宠物空气净化器测评分享
养猫最令人困扰的,就是掉毛与难以彻底消除的异味,这两个问题就成了养猫生活中的一大挑战。每当换季或是猫咪自我梳理时,家中便被一层细腻的绒毛覆盖,从地板到沙发,从床单到衣物,甚至是空气中都漂浮着细小的…...
讲清前端开发(入门)
前端开发:创建用户在网页或应用程序中直接与之交互的部分。 简单来说,就是负责打造用户在使用网站、网页应用或者移动应用时直接看到和与之交互的部分。打个比方,前端开发就像是给房子做装修。房子的框架结构已经有了,但是需要有…...
深入理解MySQL索引:原理、数据结构与优化策略
深入理解MySQL索引:原理、数据结构与优化策略 MySQL 是当今最流行的开源关系型数据库管理系统之一,其强大的性能与灵活的可扩展性使得它广泛应用于各种规模的应用程序中。在数据库的日常操作中,索引起着至关重要的作用,能够极大地…...
mysql数据库基础使用
1、登录mysql ① 本地登录 mysql -u 用户名 -p ②远程登入 mysql -h ip主机地址 -P 端口号 -u 用户名 -p 回车输入密码即可. 2、关于用户操作 ①创建用户 % 代表所有ip都可以访问,可指定主机ip create user 用户名% identified by 密码; ②修改密码 alte…...
GATK AlleleList接口介绍
在 GATK(Genome Analysis Toolkit)中,AlleleList 接口是一个用来表示等位基因(alleles)列表的接口。Allele 是遗传学中用于表示某一特定基因座的不同形式的一个基本单位。AlleleList 接口定义了一些操作,使得处理和访问一组等位基因更加方便。 AlleleList 的实现类和继承…...
直播App遭受抓包后的DDoS与CC攻击防御策略
随着直播应用的普及,越来越多的用户开始依赖这些平台进行娱乐和社交活动。然而,这也使得直播平台成为网络攻击的目标之一。其中,DDoS(分布式拒绝服务)攻击和CC(Challenge Collapsar,即HTTP慢速攻…...
【xilinx】 AXI Quad SPI IP - 如果 s_axi_wstrb 不等于 0xf,则寄存器可能无法正确更新
PG153 (v3.2) 规定如下: “AXI4-Lite 写访问寄存器由 32 位 AXI 写数据 (* _wdata ) 信号更新,并且不受 AXI 写数据选通 (* _wstrb ) 信号的影响。” "The AXI4-Lite write access register is updated by the 32-bit AXI Write Data (* _wdata ) s…...
【EPLAN】P8 2.9 使用不了ePLUSE
【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决 EPLAN P8 2.9 使用不了ePLUSE问题 2、 问题场景 客户反应 EPLAN P8 2.9 版本打开后使用不了 ePLUSE 功能,如图 1 所示 EPLAN ePLUSE 界面为空白状态,无法使用。 图 1 3、软硬件环境 …...
页面设计任务 个人简介页面
目录 任务要求 任务讲解 源码: 详细讲解 html部分 CSS部分 任务要求 页面结构: 创建一个基本的 HTML 页面,页面标题为“我的个人简介”。页面内容分为以下四个部分: 顶部导航栏: 包含至少三个导航链接,例如:“主页”、“关于…...
机械学习—零基础学习日志(如何理解概率论3)
随机变量的函数分布 一维随机变量分布,可以看到下图,X为不同情况的概率。而x如果是大于等于X,那么当x在40以内时,没有概率,为0。 当x变大,在40-80之间,那么x大于X的概率为,0.7&…...
YOLOv8添加SE注意力机制有效提升检测精度(已跑通)
SE注意力机制概念 SSqueeze-and-Excitation (SE) 注意力机制是一种专注于增强网络模型对不同特征通道的重要性理解的机制。它通过对通道维度上的特征进行动态调整,增强了网络对重要特征的敏感性。 源码 import numpy as np import torch from torch import nn fro…...
【正点原子K210连载】第三十二章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南
第三十二章 音频FFT实验 本章将介绍CanMV下FFT的应用,通过将时域采集到的音频数据通过FFT为频域。通过本章的学习,读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节: 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…...
Android Studio修改默认.m2与Gradle user home缓存位置
Android Studio修改默认.m2与Gradle user home缓存位置 1、修改Gradle user home的方法: android studio配置默认.gradle路径_android studio gradle在哪-CSDN博客文章浏览阅读2k次。当android studio新建一个项目时候,默认的.gradle路径均认为是在c盘的…...
BFS解决单源最短路问题
目录 迷宫中离入口最近的出口 最小基因变化 单词接龙 为高尔夫比赛砍树 迷宫中离入口最近的出口 题目 思路 使用宽度优先遍历解决这道题,需要一个二维数组标记是否被遍历过,也需要一个队列辅助完成宽度优先遍历,类似于水波纹一样&#x…...
Linux运维、Windows运维常用命令,保存起来当手册用
文章目录 一、centos基本命令1、升级内核到最新版本2、文件句柄数限制优化3、ssh、sftp、scp等远程命令4、find文件查找5、vi命令 二、windows常用操作 一、centos基本命令 1、升级内核到最新版本 # 1、查看内核版本 [rootlocalhost ~]# cat /etc/centos-release CentOS Linu…...
智能硬件开发实战:从核心架构到产品落地的全流程解析
1. 智能硬件:从概念到现实的产业全景透视提起“智能硬件”,很多朋友可能觉得这是个离自己生活有点距离的高科技词汇。但如果说“智能手机”,那几乎无人不知,无人不晓。其实,智能硬件和智能手机在本质上是一脉相承的&am…...
ngx_http_read_request_header
1 定义 ngx_http_read_request_header 函数 定义在 ./nginx-1.24.0/src/http/ngx_http_request.cstatic ssize_t ngx_http_read_request_header(ngx_http_request_t *r) {ssize_t n;ngx_event_t *rev;ngx_connection_t *c;ngx_http_…...
2026年好用的录音转文字工具怎么选?从链接提取到实时转写的完整方案
做会议记录、课堂笔记或内容创作时,经常卡在两个问题上:一是录音文件堆积成山不知道从何整理,二是转完文字还要花时间校对和调整。微信里有个叫提词匠的小程序在这类需求里效率比较实用,下面会重点拆解它怎么用,同时也…...
5分钟快速搭建零配置静态服务器:http-server终极完整指南
5分钟快速搭建零配置静态服务器:http-server终极完整指南 【免费下载链接】http-server A simple, zero-configuration, command-line http server 项目地址: https://gitcode.com/gh_mirrors/ht/http-server 你是否曾在本地开发时,为了预览一个简…...
3步解锁Cursor Pro永久免费使用:告别试用限制的终极指南
3步解锁Cursor Pro永久免费使用:告别试用限制的终极指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...
亲身体验AI智能体在实际项目中展现的核心能力
AI 智能体能力实战学习笔记 通过与 AI 智能体的协作,我亲身体验了 AI 在软件开发全流程中的强大能力。本文记录了智能体在实际项目中展现的核心功能,以及如何使用这些能力提高工作效率。 🎯 核心能力概览 能力地图 AI 智能体能力 ├── &a…...
从零到一:基于STM32CubeMX与USB3300的USB HS虚拟串口实战指南
1. 硬件准备与原理图设计 第一次接触STM32F4和USB3300芯片时,我完全被那些密密麻麻的引脚搞懵了。后来才发现,只要跟着CubeMX生成的配置走,硬件设计其实没那么可怕。我的开发板用的是STM32F407VET6,搭配USB3300作为PHY芯片。这里有…...
二维无金属铁磁半金属AsN2:p轨道自旋电子学的理论突破与计算设计
1. 二维无金属铁磁半金属:一个值得深挖的“潜力股”最近几年,二维材料这个领域真是热闹非凡,从石墨烯一炮而红开始,各种新奇的结构和性质层出不穷。作为一名长期关注计算材料学和自旋电子学的从业者,我一直在寻找那些既…...
VScode界面突然变模糊?别急着换眼镜,先检查NVIDIA控制面板这个设置
VScode界面突然变模糊?三步精准定位显卡驱动的"视觉陷阱" 你是否曾在深夜赶代码时,突然发现VScode的界面变得像隔了层毛玻璃?文字边缘渗出光晕,图标轮廓开始"融化",仿佛显示器突然患上了散光。这种…...
p5.js Web Editor:免费在线创意编程的终极完整指南
p5.js Web Editor:免费在线创意编程的终极完整指南 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginners, and …...
