创建型设计模式之建造者模式
文章目录
- 概述
- 定义
- 建造者模式原理
- 结构图
- 小结
概述
建造者模式又被称为生成器模式,是一种创建型设计模式。
和之前的单例,工厂一样,同属于创建型设计模式。
定义
建造者模式是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
既然这么定义,那么它解决了什么问题呢?
建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。
建造者模式原理
建造者模式包含以下四个角色:
- 抽象建造者类:这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的部件对象的创建。
- 具体建造者类:实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。在构造过程完成后,提供一个方法,返回创建好的负责产品对象。
- 产品类:要创建的复杂对象 (包含多个组成部件).
- 指挥者类:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建(客户端一般只需要与指挥者进行交互)。
结构图

小结
建造者模式在现实生活中很常见,像我们的公司内部,基本上都是由一个项目经理担任指挥者,然后有一个项目,抽象出来一个项目,产品整出来一个具体项目细节,然后由不同职位的人担任具体的建造者来实现项目详细的实现。大概吧,就是这么个流程。代码就不写了,有兴趣,可以去学习学习。
相关文章:
创建型设计模式之建造者模式
文章目录 概述定义建造者模式原理结构图小结 概述 建造者模式又被称为生成器模式,是一种创建型设计模式。 和之前的单例,工厂一样,同属于创建型设计模式。 定义 建造者模式是将一个复杂对象的构建与表示分离,使得同样的构建过程…...
mainwindow 无菜单栏 可拖动,边界可扩大,动画浮现上边框
mainwindow 无菜单栏 可拖动,边界可扩大,动画浮现上边框 #ifndef ANIMATIONWIN_H #define ANIMATIONWIN_H #include namespace Ui {class animationWin; } class animationWin : public QWidget {Q_OBJECT public: explicit animationWin(QWidget *parent = nullptr); …...
机器学习云环境测试
等待创建完成后,点击 PyTorch 打开,创建一个全新的 notebook 在 Cell 中输入如下代码,并点击 Run 完成后点击 New Cell ,在 New Cell 中输入如下代码 输入完成后点击 Run ,运行 New Cell 。(每个 Cell 代…...
扩散模型自动管道AutoPipeline
推荐:write_own_pipeline.ipynb - Colab (google.com) 为您的任务选择一个 AutoPipeline 首先选择一个检查点。例如,如果您对使用 runwayml/stable-diffusion-v1-5 检查点的文本到图像感兴趣,请使用 AutoPipelineForText2Image: f…...
Map六种遍历方式
下面是三组(6种),Map 遍历方式的核心代码。 遍历方式有使用到增强for和迭代器。最下面有张图片,对做题有参考意义。 参考代码: Map map new HashMap();map.put("小猫","cat");map.put("小…...
集合-1 数组ArrayListLinkedList
一.数组 1.什么是数组? 数组是一种用连续的内存空间存储相同类型数据的线性数据结构。 2.为什么数组下标是从0开始? (1)数组根据下标查找元素是基于寻址公式:元素地址数组首地址索引i*数组存储数据类型的大小 &am…...
42-1 应急响应之账户排查
一、用户信息排查 在服务器被入侵后,攻击者可能会建立相关账户(有时是隐藏或克隆账户),方便进行远程控制。攻击者会采用的方法主要有如下几种: 直接建立一个新的账户:攻击者直接创建一个新的账户,有时为了混淆视听,账户名称与系统常用名称相似。 激活一个系统中的默认…...
Python3 笔记:sort() 和 sorted() 的区别
1、sort() 可以对列表中的元素进行排序,会改变原列表,之前的顺序不复存在。 list.sort(key, reverse None) key:默认值是None,可指定项目进行排序,此参数可省略。 reverse&#…...
vue 引入 emoji 表情包
vue 引入 emoji 表情包 一、安装二、组件内使用 一、安装 npm install --save emoji-mart-vue二、组件内使用 import { Picker } from "emoji-mart-vue"; //引入组件<picker :include"[people,Smileys]" :showSearch"false" :showPreview&q…...
mysql 数据库 增量备份
mysql 数据库 增量备份 https://dev.mysql.com/doc/mysql-enterprise-backup/8.0/en/mysqlbackup.incremental.html 和版本 有关系啊 xtrabackup mysql增量备份与恢复使用详解 https://www.jb51.net/database/297844fzd.htm 存储 引擎 怎么看? 适用于MyISAM存储引…...
SpringBoot之@Builder 注解
(1)Builder 生成的构造器不是完美的,如果没有提供必须的参数,构造器可能会创建出不完整或者不合法的对象,导致代码报错。 Builder 注解产生的 Builder 类的构造方法默认并不能限定必传参数。 (2ÿ…...
云计算的能源消耗如何影响环境?
嗨,亲爱的读者朋友们,今天我们要聊一聊云计算的能源消耗对环境的影响。随着科技的飞速发展,云计算已经成为了企业和个人处理数据的首选方式。但是,你可曾想过,这些“云”究竟消耗了多少能源,对我们的环境又…...
openwrt设置开机自启 tailscale为例
首先下载 tailscale 到 /root 目录下,并按照以下命令运行一次 /root/tailscale/tailscaled --state/root/tailscale/tailscaled.state & /root/tailscale/tailscale up &弹出登录地址并授权即可 创建一个启动脚本位置在/etc/init.d下 vim /etc/init.d/ta…...
副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建
随着社会的发展和人们生活水平的提高,越来越多的人在面临心理压力、情感困扰或生活困境时,需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题,比如担心被他人知晓自己的隐私等,这就导致了人…...
UWB论文:Introduction to Impulse Radio UWB Seamless Access Systems(2):脉冲;超宽带;测距;定位
3) 测距/接收器 像全球定位系统(GPS)这样的系统依赖于单向测距One Way Ranging(OWR),其中多个卫星(代表固定节点,称为锚点anchors)定期传输同步的无线电数据包集合,这允许…...
Spring MVC/Web
1.Spring MVC 的介绍 Spring Web MVC是基于Servlet API构建的原始Web框架,也是Spring框架的一部分。它提供了灵活可扩展的MVC架构,方便开发者构建高性能的Web应用程序,并与 Spring 生态系统无缝集成。 2.MVC 设计模式 MVC(Model…...
C++中获取int最大与最小值(补)
上文中,我们学习了C中获取int最大与最小值的两种方法:C库和移位运算,这篇文章将解决在移位运算中遇到的各种报错,并提出一种新的生成int最值的方法 上文链接:http://t.csdnimg.cn/cn7Ad 移位运算取最值常见报错 Dev…...
一个开源的工具类轮子是怎么造出来的
心路历程 为什么要做 在22年9月的某一天,在公司开需求评审时,接到了一个给PDF、图片添加水印的需求。做为一个刚工作的CURD程序员,在遇到这些问题时,第一反应是去github上找找有没有类似的开源框架。但是,出乎我意料…...
零基础学Java第二十二天之迭代器 Iterator
迭代器 Iterator 的理解和相关集合 使用 1、理解 迭代器(Iterator)是设计模式中的一种,它允许程序员遍历容器(例如列表、集合等)中的元素,而无需了解容器底层的实现细节。在编程中,迭代器提供了…...
微服务架构-异步消息传递设计模式
微服务架构-异步消息传递设计模式 异步消息允许服务发送消息后立即返回,而不需要等待消息被处理完毕,这种异步方式可以大大提高系统的处理速度、和吞吐量。 微服务架构,通常涉及多个服务之间的相互调用,如果通信只是在少数几个微…...
Halcon实战:当键盘字符印刷检测遇上位置偏移和亮度不均,差异化模型如何“稳如泰山”?
Halcon差异化模型在键盘字符印刷检测中的实战应用 键盘字符印刷检测是工业视觉领域最具挑战性的任务之一。想象一下,当数千个键盘以每分钟数十个的速度通过传送带时,每个按键上的字符都可能存在印刷缺陷——多墨、少墨、模糊、偏移,甚至完全缺…...
保姆级教程:用UltraISO给U盘刻录Ubuntu 22.04启动盘,一次成功不踩坑
零基础实战:用UltraISO打造Ubuntu 22.04启动盘的终极指南 第一次接触Linux系统安装的新手,往往会在制作启动盘这一步遇到各种意想不到的问题。U盘明明已经刻录完成,却在启动时出现黑屏、报错甚至根本无法识别——这些困扰过无数初学者的坑&am…...
微信小程序二维码生成实战指南:weapp-qrcode高效解决方案
微信小程序二维码生成实战指南:weapp-qrcode高效解决方案 【免费下载链接】weapp-qrcode 微信小程序快速生成二维码,支持回调函数返回二维码临时文件 项目地址: https://gitcode.com/gh_mirrors/weap/weapp-qrcode 在微信小程序开发中,…...
macOS用户必看:vscode-icons安装与使用完整手册
macOS用户必看:vscode-icons安装与使用完整手册 【免费下载链接】vscode-icons Custom Visual Studio Code Icons 项目地址: https://gitcode.com/gh_mirrors/vsc/vscode-icons 想要为你的Visual Studio Code换上个性化图标吗?vscode-icons项目提…...
CANN/asc-devkit MakeNDLayout函数
MakeNDLayout 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.c…...
FARM问答系统调优终极指南:置信度校准与答案排序策略详解
FARM问答系统调优终极指南:置信度校准与答案排序策略详解 【免费下载链接】FARM :house_with_garden: Fast & easy transfer learning for NLP. Harvesting language models for the industry. Focus on Question Answering. 项目地址: https://gitcode.com/g…...
CookieCloud终极指南:一劳永逸解决多设备登录烦恼的完整方案
CookieCloud终极指南:一劳永逸解决多设备登录烦恼的完整方案 【免费下载链接】CookieCloud CookieCloud是一个和自架服务器同步浏览器Cookie和LocalStorage的小工具,支持端对端加密,可设定同步时间间隔。本仓库包含了插件和服务器端源码。Coo…...
如何选择最佳视频播放器?Awesome Video推荐15款跨平台解决方案
如何选择最佳视频播放器?Awesome Video推荐15款跨平台解决方案 【免费下载链接】awesome-video A curated list of awesome streaming video tools, frameworks, libraries, and learning resources. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-video …...
[工具] 数学题库生成器(小学,初中,高中全包括) 面向中小学数学教学的自动出题工具,覆盖从小学一年级到高中三年级共 7 个学段、33 种题型
数学题库生成器(小学,初中,高中全包括) 基本覆盖各个年级的重点题型生成,并导出为word,可以显示解题步骤。# 数学题库生成器 MathMaster 数学题库生成器(MathMaster)是一款面向中小学…...
FastAdmin旧版本CVE-2024-7928任意文件读取漏洞实战修复指南
1. 这个漏洞不是“能读任意文件”那么简单,而是整个权限体系的崩塌起点FastAdmin 是国内 PHP 后台开发领域使用率极高的开源框架,尤其在中小型企业定制化管理后台、政企内部系统、电商中台等场景中,大量项目仍基于 v1.3.x ~ v1.4.5 版本运行。…...
