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

23种设计模式——构建器模式(Builder Pattern)详解

 ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 设计模式
✨特色专栏: 知识分享
🥭本文内容: 23种设计模式——构建器模式(Builder Pattern)详解
📚 ** ps **  : 阅读文章如果有问题或者疑惑,欢迎在评论区提问或指出。


目录

一、背景

二、介绍

三、核心思想

四、组成

五、Java实现示例

六、链式调用

七、构建器模式的优点

八、适用场景


一、背景

构建器模式是我放到第一个讲解的设计模式,为什么呢?因为它是一种特别常见的设计模式,并且相对于同样常见的单例模式,初次看见它会觉得很陌生。

比如下图这段安卓代码,简单几行代码它就能弹出一个登录界面,新人初次见到这种代码可能会感到疑惑。不过没事,我们下面即将讲解!


二、介绍

构建器模式一种创建型设计模式,它允许你分步骤创建复杂对象,使得相同的构建过程可以创建不同的表示。


三、核心思想

构建器模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式特别适用于以下场景(以登录界面为例):

  • 对象有多个组成部分或复杂配置选项(比如可以给不同登录界面配置不同名称)

  • 需要创建的对象有不同的表现形式(不同名称,表示自然不同)

  • 对象的创建过程需要分步骤进行(比如除了设置名称,还能设置字体大小等......)


四、组成

  1. ​产品(Product)​​:最终要构建的复杂对象

  2. ​抽象构建器(Builder)​​:定义创建产品各个部件的抽象接口

  3. ​具体构建器(ConcreteBuilder)​​:实现Builder接口,构造和装配产品的各个部件

  4. ​指挥者(Director)​​:构建一个使用Builder接口的对象,控制构建过程


五、Java实现示例

// 1. 产品类
class Computer {private String CPU;private String RAM;private String storage;private String GPU;// 省略getter和setter方法@Overridepublic String toString() {return "Computer{" +"CPU='" + CPU + '\'' +", RAM='" + RAM + '\'' +", storage='" + storage + '\'' +", GPU='" + GPU + '\'' +'}';}
}// 2. 抽象构建器
interface ComputerBuilder {void buildCPU(String cpu);void buildRAM(String ram);void buildStorage(String storage);void buildGPU(String gpu);Computer getResult();
}// 3. 具体构建器
class GamingComputerBuilder implements ComputerBuilder {private Computer computer;public GamingComputerBuilder() {this.computer = new Computer();}@Overridepublic void buildCPU(String cpu) {computer.setCPU(cpu);}@Overridepublic void buildRAM(String ram) {computer.setRAM(ram);}@Overridepublic void buildStorage(String storage) {computer.setStorage(storage);}@Overridepublic void buildGPU(String gpu) {computer.setGPU(gpu);}@Overridepublic Computer getResult() {return computer;}
}// 4. 指挥者
class ComputerDirector {public Computer constructGamingComputer(ComputerBuilder builder) {builder.buildCPU("Intel i9");builder.buildRAM("32GB DDR5");builder.buildStorage("1TB NVMe SSD");builder.buildGPU("NVIDIA RTX 4090");return builder.getResult();}public Computer constructOfficeComputer(ComputerBuilder builder) {builder.buildCPU("Intel i5");builder.buildRAM("16GB DDR4");builder.buildStorage("512GB SSD");return builder.getResult();}
}// 客户端代码
public class BuilderPatternDemo {public static void main(String[] args) {ComputerDirector director = new ComputerDirector();ComputerBuilder builder = new GamingComputerBuilder();Computer gamingComputer = director.constructGamingComputer(builder);System.out.println("Gaming Computer: " + gamingComputer);Computer officeComputer = director.constructOfficeComputer(builder);System.out.println("Office Computer: " + officeComputer);}
}

六、链式调用

现代Java开发中常用的一种变体是使用链式调用(Fluent Interface):

class Computer {private String CPU;private String RAM;private String storage;private String GPU;// 私有构造器private Computer(Builder builder) {this.CPU = builder.CPU;this.RAM = builder.RAM;this.storage = builder.storage;this.GPU = builder.GPU;}public static class Builder {private String CPU;private String RAM;private String storage;private String GPU;public Builder withCPU(String cpu) {this.CPU = cpu;return this;}public Builder withRAM(String ram) {this.RAM = ram;return this;}public Builder withStorage(String storage) {this.storage = storage;return this;}public Builder withGPU(String gpu) {this.GPU = gpu;return this;}public Computer build() {return new Computer(this);}}@Overridepublic String toString() {return "Computer{" +"CPU='" + CPU + '\'' +", RAM='" + RAM + '\'' +", storage='" + storage + '\'' +", GPU='" + GPU + '\'' +'}';}
}// 客户端代码
public class BuilderPatternDemo {public static void main(String[] args) {Computer computer = new Computer.Builder().withCPU("Intel i7").withRAM("16GB").withStorage("512GB SSD").withGPU("NVIDIA GTX 1660").build();System.out.println(computer);}
}

七、构建器模式的优点

  1. ​封装性好​​:客户端不必知道产品内部组成的细节

  2. ​构建过程可控​​:可以精细控制产品的创建过程

  3. ​扩展性好​​:增加新的具体构建器无需修改原有代码

  4. ​解耦​​:将构建过程与产品本身分离


八、适用场景

  1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时

  2. 当构造过程必须允许被构造的对象有不同的表示时

  3. 当需要分步骤创建对象,并且这些步骤可能有不同实现时

构建器模式在Java中广泛应用,例如StringBuilder、Locale.Builder等都是构建器模式的实现。


 最后,

        其它设计模式会陆续更新,希望文章对你有所帮助!

http://www.dtcms.com/a/341120.html

相关文章:

  • Spring Boot Controller 使用 @RequestBody + @ModelAttribute 接收请求
  • 车联网(V2X)中万物的重新定义---联网汽车新时代
  • Dubbo 的 Java 项目间调用的完整示例
  • 分析NeRF模型中颜色计算公式中的参数
  • Paraformer实时语音识别中的碎碎念
  • RuntimeError: Dataset scripts are no longer supported, but found wikipedia.py
  • 车辆订单状态管理的优化方案:状态机设计模式
  • 从ioutil到os:Golang在线客服聊天系统文件读取的迁移实践
  • 从零开发Java坦克大战Ⅱ(上) -- 从单机到联机(架构演进与设计模式剖析)
  • 音频大模型学习笔记
  • CS+ for CC编译超慢的问题该如何解决
  • 0-1 背包问题(模板)
  • 汽车ECU实现数据安全存储(机密性保护)的一种方案
  • Ubuntu apt安装nginx
  • 使用Spring Retry组件优雅地实现重试
  • Java 定时任务 - 从基础到高阶使用 - 从 Timer 到 Quart
  • 数据结构 二叉树 二叉树链式结构的实现
  • 数据分析师常用命令
  • 数据结构中的列表:深度解析数组与链表的实现与抉择
  • PyTorch API 3 - distributed
  • 前后端联合实现文件上传,实现 SQL Server image 类型文件上传
  • 51单片机-驱动LED点阵模块教程
  • SQL-leetcode—3374. 首字母大写 II
  • Docker--安装MySQL、Redis
  • 面试常考的 SQL 窗口函数汇总
  • 【Tech Arch】Apache Pig大数据处理的高效利器
  • 深入理解数据结构:从数组、链表到B树家族
  • 数据结构:利用旋转在AVL树中维持平衡(Inserting in AVL with Rotation)
  • FastAPI初学
  • PyTorch API 1