当前位置: 首页 > 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)只需要知道如何使用这些方法来构建计算机,而不需要关心其他不必要的细

相关文章:

  • Go 通道(Channel)入门与基础使用
  • ZZU-ARM汇编语言实验2
  • 41页PPT | 基于AI制造企业解决方案架构设计智能制造AI人工智能应用智能质检人工智能质检建设
  • 在C# 中使用建造者模式
  • Spring cloud-k8s容器化部署
  • 同步与异步:软件工程中的时空艺术与实践智慧-以蜻蜓hr人才系统举例-优雅草卓伊凡
  • 记录rust滥用lazy_static导致的一个bug
  • 论文笔记 - 《Implementing block-sparse matrix multiplication kernels using Triton》
  • Linux【7】------Linux系统编程(进程间通信IPC)
  • docker-compose和docker下载
  • mysql DQL(javaweb第七天)
  • 博客:基本框架设计(下)
  • 搭建第一个 Vite 项目
  • 【读论文】DiffPhyCon 扩散物理系统控制
  • 【Django】性能优化-普通版
  • C++ 网络编程(11)服务器逻辑层设计和消息完善
  • 7.7 Extracting and saving responses
  • 【医学目标检测】LN-DETR:一种基于多尺度特征融合的肺结节检测高效Transformer架构
  • Ceph分布式存储方案
  • Barcode解码 一维码、二维码识别 物流单号识别
  • wordpress on sent ok/合肥网站优化平台
  • 开发网站开始的工作/珠海百度关键字优化
  • 做网站界面多少钱/网络广告营销经典案例
  • 网站怎么做反向代理/成都网站seo性价比高
  • 做网站的而程序/网站设计培训
  • 有限责任公司注册条件/seo公司厦门