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

设计模式4-建造者模式

定义

        Builder Partern:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(针对于构建对象的参数众多而提出的解耦合,创造复杂对象

目的

        ● 使参数更加可视化和可以明确各个参数的定义

        ● 定义规范和约束

场景

      ● 当构建一个类的参数众多避免参数混乱时,可以使用建造者模式

实际使用

        ●java.lang.StringBuilder 和 java.lang.StringBufferappend() 方法返回自身,类似于建造者的链式调用。

        ●java.util.stream.Stream.Builder

代码

// 产品类 - 计算机
public class Computer {// 必需参数private String cpu;private String ram;// 可选参数private String storage;private String graphicsCard;private boolean bluetoothEnabled;// 私有构造函数,只能通过Builder构建private Computer(ComputerBuilder builder) {this.cpu = builder.cpu;this.ram = builder.ram;this.storage = builder.storage;this.graphicsCard = builder.graphicsCard;this.bluetoothEnabled = builder.bluetoothEnabled;}// 省略 getter 方法...// 静态内部类 - 建造者public static class ComputerBuilder {// 必需参数private String cpu;private String ram;// 可选参数 - 初始化默认值private String storage = "500GB HDD";private String graphicsCard = "Integrated";private boolean bluetoothEnabled = false;// 建造者的构造函数,接收必需参数public ComputerBuilder(String cpu, String ram) {this.cpu = cpu;this.ram = ram;}// 用于设置可选参数的方法,并返回建造者本身以实现链式调用public ComputerBuilder setStorage(String storage) {this.storage = storage;return this;}public ComputerBuilder setGraphicsCard(String graphicsCard) {this.graphicsCard = graphicsCard;return this;}public ComputerBuilder setBluetoothEnabled(boolean bluetoothEnabled) {this.bluetoothEnabled = bluetoothEnabled;return this;}// 最终的构建方法,返回构建好的产品public Computer build() {// 可以在这里进行校验if (cpu == null || ram == null) {throw new IllegalArgumentException("CPU and RAM are required");}return new Computer(this);}}@Overridepublic String toString() {return "Computer [cpu=" + cpu + ", ram=" + ram + ", storage=" + storage + ", graphicsCard=" + graphicsCard+ ", bluetoothEnabled=" + bluetoothEnabled + "]";}
}class Client {public static void main(String[] args) {// 使用建造者一步步构建产品,链式调用,清晰易懂Computer gamingComputer = new Computer.ComputerBuilder("Intel i9", "32GB").setStorage("1TB NVMe SSD").setGraphicsCard("NVIDIA RTX 4080").setBluetoothEnabled(true).build(); // 最终调用build方法构建对象System.out.println(gamingComputer);// 构建一个基础配置的电脑,只设置必需参数,使用可选参数的默认值Computer officeComputer = new Computer.ComputerBuilder("Intel i5", "16GB").build();System.out.println(officeComputer);}
}

建造者模式代码

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

相关文章:

  • k8s笔记02概述
  • 网络编程--TCP/UDP Socket套接字
  • SciPy科学计算与应用:SciPy插值技术入门-线性与样条插值
  • MySQL 行转列与列转行的实现方式
  • 堆栈面试题之有效的括号
  • 顶升机设计cad+三维图+设计说明书
  • AR智能巡检:重塑消防行业新未来
  • 【Axure高保真原型】嵌套表格_查看附件
  • AR智能巡检:智慧工地的高效安全新引擎
  • zookeeper-znode解析
  • 【P2P】P2P主要技术及RELAY服务实现
  • 前端 Promise 全面深入解析
  • Unity中的特殊文件夹
  • 【Python】在 Pydantic 模型中使用非 Pydantic 定义的类作为模型字段类型
  • Java项目-苍穹外卖_Day2
  • 8 设计URL短链
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十) 文件、文件夹选择框、保存文件框
  • qt配置ros2环境,简单版本
  • Rust:变量、常量与数据类型
  • 2025 突出的时序模型
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day13
  • Linux-Redis的安装
  • 第四章:并发编程的基石与高级模式之Select语句与多路复用
  • 【Linux】开发工具命令指南:深度解析Vim的使用操作
  • Allegro17.4导出带有NET的PDF文档及组装样式图
  • MongoDB vs MySQL:NoSQL 和 SQL 的核心区别与适用场景
  • 前端开发:详细介绍npm、pnpm和cnpm分别是什么,使用方法以及之间有哪些关系
  • CPTS-Pressed复现(XML-RPC)
  • Python 面向对象进阶:深入理解封装、继承与多态
  • 【C++】第二十六节—C++11(中) | 右值引用和移动语义(续集)+lambda