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

设计模式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.xdnf.cn/news/18749.html

相关文章:

  • 【AI论文】LiveMCP-101:针对支持多主体通信协议(MCP)的智能体在复杂查询场景下的压力测试与故障诊断
  • iptables 防火墙技术详解
  • 【AI编程】如何快速通过AI IDE集成开发工具来生成一个简易留言板系统
  • 使用 HandlerMethodReturnValueHandler 在SpringBoot项目 实现 RESTful API 返回值自动封装,简化开发
  • Linux系统网络管理
  • 积分排行样式
  • 动态住宅代理:跨境电商数据抓取的稳定解决方案
  • 3785定期复盘代码实现设计模式的越识应用
  • Java接口调用第三方接口时的超时处理策略
  • 浅谈为什么尾递归更高效?——从调用栈和汇编的视角
  • 开源零信任本地化部署实战指南:Keycloak + OpenZiti 完整方案
  • 机器学习-朴素贝叶斯
  • 常用的分布式ID设计方案
  • 可信医疗大数据来源、院内数据、病种数据及编程使用方案分析
  • 【MTCNN网络结构记忆卡片】--003nets.py
  • 嵌入式第三十六天(网络编程(TCP))
  • Java的数字计算
  • More Effective C++ 条款06: 区分自增自减操作符的前缀和后缀形式
  • 若依4.7.8(springboot2.5.15)升级到4.8.1(springboot3.3.5)并集成Dubbo3客户端
  • 工程师的自我修养
  • Python JSON数据格式
  • 【数据结构】-4-顺序表(上)
  • 复杂水域场景识别率↑89%!陌讯多模态融合算法在岸边垃圾检测的落地实践
  • CUDA安装,pytorch库安装
  • 小米AX3600访问桥接的光猫
  • 图解SpringMVC工作流程,以及源码分析。
  • Hibernate详解
  • 爆肝三周,我终于上线了自己的第一个小程序
  • Vue 项目 package.json 终极详解(主流实践 / 逐项说明)
  • 大型 C/C++ 项目中 AI 助手(Cursor / Claude Code)日常操作清单与发散思路