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

建造者模式(Builder Pattern)

建造者模式(Builder Pattern)

建造者模式是一种创建型设计模式,它将复杂对象的构建过程与其表现形式分离,从而使相同的构建过程能够生成不同的对象表示形式。这种模式特别适用于需要构造包含多个部分的复杂对象,并且这些部分的构建顺序或配置可能需要灵活调整的场景。

1. 核心概念
  • 产品(Product):最终要构建的复杂对象,通常由多个部件组成。

    • 在示例代码中,Computer 类就是产品类,它包含了 CPU、RAM 和存储等部件。
  • 抽象建造者(Builder):定义构建产品的各个步骤的接口。

    • 示例中的 ComputerBuilder 接口定义了构建 CPU、RAM 和存储的方法,以及获取最终产品的 getComputer() 方法。
  • 具体建造者(Concrete Builder):实现抽象建造者的接口,提供具体的构建逻辑,并负责构建和装配各个部件。

    • 示例中的 DesktopBuilder 是具体建造者类,它实现了 ComputerBuilder 接口,并提供了具体的构建方法。
  • 指挥者(Director):负责控制构建过程,按照一定的顺序调用建造者的各个方法来构建产品。

    • 示例中的 Director 类通过 construct 方法控制构建过程,依次调用 buildCpubuildRambuildStorage 方法。
  • 客户端(Client):使用指挥者和具体建造者来创建产品。

    • 示例中的 BuilderPattern 类是客户端代码,它创建了一个 DesktopBuilder 实例,并通过 Director 来构建 Computer 对象。
2. 设计原则

建造者模式体现了多个重要的设计原则:

单一职责原则 (Single Responsibility Principle, SRP)
  • 体现
    • Computer 类只负责存储计算机的各个部件信息。
    • ComputerBuilder 接口和它的实现类 DesktopBuilder 只负责构建计算机的各个部件。
    • Director 类只负责控制构建过程的顺序。

每个类都有明确的职责范围,这使得代码更易于理解和维护。

开闭原则 (Open/Closed Principle, OCP)
  • 体现
    • 如果需要添加新的类型的计算机(如 LaptopBuilder),只需创建一个新的具体建造者类并实现 ComputerBuilder 接口,而无需修改现有的代码。

这种方式使得系统能够在不改变现有代码的情况下进行扩展,从而降低了引入新错误的风险。

依赖倒置原则 (Dependency Inversion Principle, DIP)
  • 体现
    • Director 类依赖于 ComputerBuilder 接口,而不是具体的建造者类(如 DesktopBuilder)。
    • 具体建造者类实现了 ComputerBuilder 接口,这样高层模块(Director)和低层模块(具体建造者)都依赖于抽象(ComputerBuilder 接口)。

这种设计使得高层模块和低层模块之间的耦合度降低,提升了系统的灵活性和可维护性。

接口隔离原则 (Interface Segregation Principle, ISP)
  • 体现
    • ComputerBuilder 接口只定义了构建计算机所需的方法(buildCpu, buildRam, buildStorage, getComputer),没有多余的方法。
    • 客户端(如 Director)只需要知道如何使用这些方法来构建计算机,而不需要关心其他不必要的细
http://www.xdnf.cn/news/985267.html

相关文章:

  • 设计模式-组合模式
  • Ubuntu20.04更新Cmake版本
  • 找到字符串中所有字母异位词
  • 使用 PyTorch 和 TensorBoard 实时可视化模型训练
  • SpringBoot学习day1-SpringBoot的简介与搭建
  • Phthon3 学习记录-0611
  • Windows 删除文件出现错误代码0x80070570:文件或目录损坏且无法读取
  • 第五章网络管理
  • vibe coding 2025工具全景图
  • 构建高效开发节奏:我的IDEA休息提醒插件实践
  • fastadmin自动保存格式datetime
  • JavaEE-SpringBoot
  • 基于SpringBoot实现的课程答疑系统设计与实现【源码+文档】
  • 【MySQL数据库 | 第四篇】 数据类型+DDL表操作1
  • 从零开始了解数据采集技术篇(2)——如何提高数据采集的精度与速度
  • ALIGN_COMMA_ENABLE参数
  • 贪心选择 (Greedy Choice)
  • 大语言模型智能体开发的技术框架与应用前景
  • 日期的数据格式转换
  • 红队手法:从web漏洞到ssh横向移动 实战方案
  • vue3笔记(1)自用
  • 选择、填空、判断
  • 深入理解Python协程:async def、async for、await、yield详解
  • 学习日记-day27-6.11
  • Debian/Ubuntu systemd coredump调试程序Crash
  • 光纤传感预警工业罐体爆炸风险
  • 6.11打卡
  • PyTorch:让你的深度学习从「纸上谈兵」到「真枪实战」的魔法棒!
  • 直接使用阿里云OSS的地址,报跨域访问的问题怎么解决
  • 七牛云图片上传 前后端全过程