设计模式 -- 建造者模式

news2024/9/25 17:17:48

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是建造者模式?

        建造者模式是一种创建型设计模式,它允许您将复杂对象的构建步骤分离,从而让使用者更好的控制它们的创建过程.

二、建造者模式的优缺点:

优点:

  1. 可以将一个复杂对象的构造过程与其表示分离,使得构造过程和表示可以独立地变化。
  2. 可以使得代码更加清晰,易于理解和维护。
  3. 可以使得对象的构造过程更加灵活,可以根据需要动态地改变构造过程。
  4. 可以避免在构造过程中出现重复的代码,提高代码的重用性。

缺点:

  1. 建造者模式增加了代码的复杂性,需要创建多个类和接口,增加了代码的维护难度。

  2. 在建造者模式中,每个具体的建造者必须实现相同的接口,这可能会导致代码冗余。

  3. 建造者模式需要创建多个对象,这可能会导致性能问题。

  4. 建造者模式可能会导致过度的设计,增加了代码的复杂性和维护难度

三、建造者模式的结构:

 

 抽象建造者(MarriageBuilder):包含创建产品各个子部件的抽象方法接口

具体建造者(ManBuilder和WomanBuilder):实现builde,完成复杂产品各个部件的具体创建方法

产品(Marry):包含多个组成部件的复杂对象

指挥者(Mom):调用建造者对讲中的部件构造与装配方法完成复杂对象的创建

四、建造者模式实战:

        以上结构图为例,现在的年轻人都面临着结婚现状,小明跟小美说,想先买车,在买房,然后结婚,但小美说她要先买房,在结婚,之后在买房.在两人纠缠不休之际,妈妈说我来安排

1.创建产品Marry:

 

2.创建抽象建造者 MarriageBuilder

 

 

 3.创建具体建造者

 

 

 4.创建指挥者Mon

 5.测试

6.结果

 

  所以到底要听谁的指挥呢.... 

五.总结:

        建造者模式,我想大家都用的挺多的StringBuilder啥的,因此大家也可以仔细思考下,自己的业务场景里面是否有同样的适用场景.

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

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

相关文章

WPF教程(四)--Dispatcher

一、Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以包含多个线程,其中有一个是主线程,其余的是…

Embodied AI 具身智能

大模型的时代的到来,现在的大模型的参数几乎是几何级数的上升。 谷歌和柏林工业大学的团队重磅推出了史上最大视觉语言模型——PaLM-E:An Embodied Multimodal Language Model。通才大模型PaLM-E,什么是通才模型,就是多任务统一学…

NeRF必读:NeuS--三维重建的milestone以及脑补的作者脑回路

前言 NeRF从2020年发展至今,仅仅三年时间,而Follow的工作已呈井喷之势,相信在不久的将来,NeRF会一举重塑三维重建这个业界,甚至重建我们的四维世界(开头先吹一波)。NeRF的发展时间虽短&#xf…

C++入门(前篇)

🔥🔥本章重内容 C入门 1.命名空间2. C输入&输出3. 缺省参数 简单的说一下C语言的出现是为了弥补C语言的不足 由于要补充的东西太多,所以就在C语言的基础上又出了C 所以我认为学习C的前提是你得懂C语言 C中可以使用C的大部分语法 可以这样…

Autowired注解与Resource注解的区别

两者的用法 其实这两个注解的作用都一样,都是在做bean的注入,在使用过程中,两个注解有时候可以替换使用 两者的共同点 Resource注解和Autowired注解都可以用作bean的注入.在接口只有一个实现类的时候,两个注解可以互相替换,效果相同. 两者的不同点 Resource注解是Java自身的…

技术分享 | OceanBase 手滑误删了数据文件怎么办

作者:张乾 外星人2号,现兼任六位喵星人的资深铲屎官。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 手滑误删了数据文件,并且没有可替换的节点时&…

代码随想录第19天 | 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 var lowestCommonAncestor function(root, p, q) {// 使用递归的方法// 1. 使用给定的递归函数lowestCommonAncestor// 2. 确定递归终止条件if(root null) {return root;}if(root.val > p.val && root.val > q.val) {// 向左子…

set、map容器

一、set 1. set基本概念 简介: 所有元素都会在插入时自动被排序 本质: set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现。 set和multiset区别: set不允许容器中有重复的元素 multiset允许容器中有重复的元素 2. set构造和赋值 构造: set<T> st; …

安装WMware16、centos7记录

将一台闲置电脑安装虚拟机&#xff0c;计划给个8G内存&#xff0c;80G硬盘&#xff0c;打算安装WMware16&#xff0c;对系统要求是win10 一、将win7升级到win10 1.1、正版的win10安装U盘制作教程 https://www.bilibili.com/video/BV1AW411G7Lq/?vd_sourcecaf04463d06774efd…

Okio 网络提速

文章目录网络数据处理流程Page Cache传统 I/O 拷贝的性能问题零拷贝技术DMA 技术零拷贝技术分类mmapsendfilespliceDirect I/O零拷贝技术性能分析小结OkioOkio 的使用Okio 网络提速的原理Okio 总结总结网络数据处理流程 在讲 Okio 之前&#xff0c;为了能更好的了解 Okio 的优…

如何制定项目里程碑 它的作用体现在哪

制定项目里程碑是项目管理中的一个重要步骤&#xff0c;它可以帮助团队确立项目目标、分解任务、评估风险、规划资源和监控进度。在这篇文章中&#xff0c;我们将介绍如何制定项目里程碑和它的作用。 如何制定项目里程碑 制定项目里程碑需要遵循以下步骤&#xff1a; 1、确定…

《程序员面试金典(第6版)》面试题 10.01. 合并排序的数组

题目描述 给定两个排序后的数组 A 和 B&#xff0c;其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法&#xff0c;将 B 合并入 A 并排序。 初始化 A 和 B 的元素数量分别为 m 和 n。 示例: 输入: A [1,2,3,0,0,0], m 3 B [2,5,6], n 3 输出: [1,2,2,3,5,6] 说明: …

简单六步,帮助HR高效管理零工

AIHR发布的《2023人力资源趋势》中提到&#xff0c;过去HR往往只关注全职员工&#xff0c;忽略了其他劳动力生态系统成员&#xff0c;比如零工、外包员工和临时工等&#xff0c;而如今这些劳动力生态系统的成员在公司的服务交付中发挥着越来越重要的作用。△ 传统劳动力生态系统…

Java入坑之集合、流与序列化

一、集合 1.1集合定义 集合概念&#xff1a; 保存和盛装数据的容器&#xff0c;将许多元素组合成一个单一单元的容器对象。集合&#xff0c;可用于存储/检索/操作/传输/聚合数据集合框架&#xff1a; 表示和操作集合的体系&#xff0c;包括接口、实现类&#xff0c;集合框架的…

【Nav2】Ubuntu18+ROS2 Eloquent跑通Navigation2仿真示例

【背景】 打算通过Navigation2来了解ROS2的核心两大件——LifeCircle和BehaviorTree&#xff0c;结果根据官网的教程一顿鼓捣&#xff0c;这个Turtlbot3的仿真就是跑不起来&#xff0c;这怎么能忍&#xff1f;虽然在Ubuntu20上使用Foxy版本可以非常容易就跑通demo&#xff0c;…

3年外包终上岸,我只能说:但凡有点机会,千万别去外包...

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司的软件测试岗&#xff0c;一干就是3年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&am…

behaviac —— Win10下Vs2017编译“腾讯行为树“源码

简介 - 腾讯行为树 behaviac是游戏AI的开发框架组件,也是游戏原型的快速设计工具。支持全平台,适用于客户端和服务器,助力游戏快速迭代开发 。编辑器可以运行在PC上,操作方便直观可靠,支持实时和离线调试;编辑器可以导出xml,bson等多种格式,更可以导出C++、C#源码,提供…

免费1年服务器,部署个ChatGPT专属网页版

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 白皮袄个免费1年服务器&#xff0c;部署个ChatGPT专属网页版&#xff01; api.openai.com port 443: Connection timed out 你是…

Spring Security --- 基于内存模型创建用户角色

授权实现方式 基于内存模型实现授权基于默认数据库模型实现授权基于自定义数据库模型实现授权 基于内存模型创建用户角色 在Spring Security4.x版本中&#xff0c;登陆的用户有一个默认的ROLE_USER角色但是在Spring Security5.x版本中&#xff0c;把这个默认的角色给去掉了需要…

推荐一个3D建模工具集

3D建模工具集, 收录一下几个工具集&#xff1a;数字孪生编辑器 基于WebGL技术&#xff0c;依托丰富的模型资产库&#xff0c;通过拖拽式的操作&#xff0c;方便用户高效便捷的搭建三维数字孪生场景&#xff0c;配合twin服务平台&#xff0c;实现孪生设备姿态控制的虚实…