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

设计模式 - 建造者模式 笔记

一、驱动力构建复杂对象属性多、可选参数多时用构造函数构建会导致敲码易出错、可读性不高、等。 由此引入建造者模式来改善问题。建造者模式可看作 构造函数的 补充方案使用构造函数new构建对象是面对绝大多数对象的最基础、最通用的方案。一旦对象复杂了参数多、可选、最好分步创建的构造函数就不够用了这时候建造者模式作为它的补充方案上场。归纳相比构造函数① 可读性更高② 改进可选参数的配置不灵活问题③ 拆分臃肿的构造函数为清晰的构建步骤二、举例一个电脑对象包含属性CPU、显卡、内存、硬盘、电源、显示器、键盘、鼠标、机箱、喇叭 ......等等很多属性例如喇叭、显示器等可以不要。1. 如果使用构造函数new Computer(i9, 3090, 16G, 1T, Null , 黑色, 500W , Null ......);会带来几个问题① 参数十几个顺序不能错传错一个出 bug。② 读代码时一眼看去哪个是内存、哪个是硬盘③ 有的电脑不要喇叭、有的不要显示器。是约定好让不要就传Null还是说让一些参数默认 null 还是说重载多个构造函数2. 建造者怎么解决引入一个电脑建造者ComputerBuilder指挥它干活建造我想要的对象Computer pc new ComputerBuilder() .cpu(i9) .gpu(3090) .ram(16G) .build();带来好处① 代码一眼清晰明了、不要的参数就不要不用传null什么的② 将原本堆积到构造函数中的所有逻辑代码拆分了一下更简单、灵活build() 时可统一校验一下传入的对象是否都合法兼容。三、其他要点1、 建造者模式——天然适合「固定步骤、顺序不能乱、分步组装」的对象例如造房子的4 步① 打地基 ② 砌墙 ③封顶 ④装修必须先打地基 → 再砌墙 → 再封顶 → 最后装修这时候可以有一个指挥者来固定一套 “组装步骤顺序”让建造者照着顺序干活。2、建造者模式——核心思想将复杂对象的构建过程与表示最终成品分离用相同的构建步骤生成不同的对象。如何理解拆开翻译1. 构建过程 制作步骤比如造房子固定就这4 步打地基砌墙封顶装修这就是构建过程步骤永远不变。2. 表示最终成品 造出来的东西例如普通平房豪华别墅高楼大厦这就是不同的成品同样 4 步传入参数不同可以造出不同的房子。3. 分离意思就是步骤是步骤房子是房子我只管按固定 4 步盖 至于盖出来是平房还是别墅互不干扰。3、为什么不直接new出对象并依次 属性赋值因为这样对象就是可变的了new 出来后你可以修改别人也可以随便改线程不安全、容易被篡改。当然如果是单线程的、可忽略安全性项目也可以如此。C# 有 new 对象{属性A xxx 属性B xxx......} 这种写法。
http://www.gsyq.cn/news/1334603.html

相关文章:

  • 从普通AI算法工程师到AI技术负责人:软件测试从业者的进阶之路
  • [菜鸟教程] 机器学习教程第七课-Python 入门机器学习
  • 用STM32CubeMX和HAL库5分钟搞定PWM呼吸灯(STM32F407ZG实战)
  • 交流充电桩通信模块设计:从PWM握手到PLC/CAN协议实战解析
  • Delphi高分屏UI适配避坑指南:以TTitleBarPanel自定义标题栏为例,解决4K/2K显示错位问题
  • 2026最新论文降AI全攻略:亲测5大高质量工具,掌握免费Prompt指令顺利交稿
  • RK3588开发板快速测试指南:从硬件验证到系统稳定性评估
  • 状态机——SpringStateMachine并行区域状态流转
  • 【物联网专业】案例11_1:液晶应用实例LCD1602(1)
  • 2026年成都主城区地毯清洗服务机构实力排行 - 优质品牌商家
  • Python DXF处理库ezdxf的技术架构与工程实践深度解析
  • 2026实验室超声波清洗机:医用超声波清洗机/单槽超声波清洗机/双槽超声波清洗机/吻合器超声波焊接机/塑料超声波焊接机/选择指南 - 优质品牌商家
  • 2026年在线水印去除工具推荐:5大方法与4款小程序实测对比
  • Int J Surg华中科技大学同济医学院附属协和医院:可解释机器学习模型预测胰腺癌早期复发:整合瘤内瘤周影像组学及身体成分分析
  • AI赋能工业无损检测:从图像识别到缺陷自动判读的技术演进
  • 收藏!2026年纯业务程序员将淘汰?大模型技术带你抓住AI时代红利,小白也能轻松入门!
  • 2026年HR SaaS选型实测:用友领跑,多场景适配全规模企业!
  • 2026.05 视觉巅峰对决:ImageNet 图像分类 SOTA 模型终极盘点
  • iPaaS厂商:五家主流集成平台的技术与市场观察
  • AI测试的现状与未来:AI会取代人工测试吗
  • c# 简单记录一下我学习的过程 2026.5.20
  • 深入 MQTT:从初学者到行业专家的全栈指南
  • RK3399 Linux内核深度调试:CodeViser实战与多核问题排查
  • Spring Boot项目整合腾讯云COS,手把手教你实现文件上传功能(附完整工具类代码)
  • 为什么你的无锁队列在压测中崩了——从 ABA 问题到 Hazard Pointer,追踪 lock-free 内存回收的生死时序
  • 搞定若依框架内嵌iframe页面缓存难题:一个v-show + 路由监听的改造方案
  • 手把手调试:在STM32上单步跟踪FreeRTOS的PendSV任务切换全过程
  • Android广播ANR避坑指南:你的onReceive方法真的安全吗?(附超时时间详解)
  • 避坑指南:在ArcGIS中提取DEM高程点,为什么导入Global Mapper后看不到高度?
  • ChipDNA PUF技术:从晶体管失配到硬件安全密钥的工程实践