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

职业中学网站建设织梦 公司网站模板

职业中学网站建设,织梦 公司网站模板,代理充值平台网站,p2p网站策划🚀 生成器模式(Builder Pattern):让对象构建更优雅! “遇到复杂对象构建?试试生成器模式!” 在日常开发中,我们经常会遇到 创建对象属性过多、构造方法过长、可选参数混乱 的问题。这…

🚀 生成器模式(Builder Pattern):让对象构建更优雅!

“遇到复杂对象构建?试试生成器模式!”

在日常开发中,我们经常会遇到 创建对象属性过多、构造方法过长、可选参数混乱 的问题。这时候,我们就需要 生成器模式(Builder Pattern) 来简化对象的创建过程,让代码更加清晰、可维护。

本篇文章基于 《Head First 设计模式》,带你深入理解 生成器模式的核心思想、应用场景、优缺点,以及在 JDK 和 Spring 框架中的实践,并提供 Java 代码示例,助你高效掌握这一重要设计模式!🚀


🎭 先看问题:对象创建的痛点

假设我们有一个 复杂的 Product,有多个可选参数:

public class Product {private String name;private double price;private String manufacturer;private String category;private int stock;public Product(String name, double price, String manufacturer, String category, int stock) {this.name = name;this.price = price;this.manufacturer = manufacturer;this.category = category;this.stock = stock;}
}

❌ 遇到的问题

1️⃣ 构造方法参数过多,调用时容易混淆

Product product = new Product("Laptop", 999.99, "Apple", "Electronics", 100);

如果参数顺序错了,比如把 pricestock 位置写反,就会导致 难以发现的 Bug

2️⃣ 不支持部分参数可选
比如,有些 Product 可能不需要 manufacturer,但是 Java 没有默认参数,我们只能重载多个构造方法,导致代码臃肿:

public Product(String name, double price, String category) {this(name, price, "Unknown", category, 0);
}

3️⃣ 可读性差,扩展困难
如果后续增加新属性,比如 discount(折扣),就需要 修改所有构造方法,破坏了开闭原则(OCP)


🎯 解决方案:引入生成器模式

生成器模式(Builder Pattern) 通过 链式调用分步骤构造,让对象创建更加优雅!

1️⃣ 设计 ProductBuilder

public class Product {private String name;private double price;private String manufacturer;private String category;private int stock;// 私有构造函数,防止直接创建对象private Product(ProductBuilder builder) {this.name = builder.name;this.price = builder.price;this.manufacturer = builder.manufacturer;this.category = builder.category;this.stock = builder.stock;}// 静态内部类:Builderpublic static class ProductBuilder {private String name;private double price;private String manufacturer = "Unknown"; // 默认值private String category = "General"; // 默认值private int stock = 0;public ProductBuilder(String name, double price) {this.name = name;this.price = price;}public ProductBuilder manufacturer(String manufacturer) {this.manufacturer = manufacturer;return this;}public ProductBuilder category(String category) {this.category = category;return this;}public ProductBuilder stock(int stock) {this.stock = stock;return this;}public Product build() {return new Product(this);}}
}

2️⃣ 使用 Builder 模式创建对象

Product product = new Product.ProductBuilder("Laptop", 999.99).manufacturer("Apple").category("Electronics").stock(100).build();

✅ 生成器模式的优势

🔹 避免构造方法参数混乱,可读性更强
🔹 支持可选参数,避免构造方法重载
🔹 易于扩展,添加新字段不影响已有代码
🔹 支持链式调用,代码更加优雅


🎯 生成器模式的适用场景

创建复杂对象(参数过多、可选参数多的对象)
对象不可变(比如 String,创建后不可修改)
避免构造方法重载(减少代码膨胀)
提高代码可读性(链式调用,清晰直观)


🔍 生成器模式在 JDK 和 Spring 框架中的应用

📌 1. JDK 中的应用:StringBuilder

StringBuilder 采用 生成器模式 来高效拼接字符串:

String result = new StringBuilder().append("Hello ").append("World!").toString();

相比 String不可变性StringBuilder 避免了不必要的对象创建,提高了性能!

📌 2. Spring 框架中的应用:BeanDefinitionBuilder

在 Spring 中,BeanDefinitionBuilder 也是典型的 生成器模式 实现:

BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(MyService.class).addPropertyValue("name", "Spring Service").setScope(BeanDefinition.SCOPE_SINGLETON).getBeanDefinition();

🔹 可选参数不强制填充,避免复杂构造方法
🔹 链式调用,简洁清晰


🎯 生成器模式 vs 工厂模式

对比项生成器模式(Builder)工厂模式(Factory)
作用构造复杂对象,控制构造过程创建对象,封装 new 过程
是否支持可选参数✅ 支持❌ 不支持
是否支持链式调用✅ 支持❌ 不支持
使用场景复杂对象创建,参数多只需创建对象,逻辑简单

📌 什么时候用?

  • 参数少,逻辑简单工厂模式
  • 参数多,构造复杂生成器模式

🎉 总结

生成器模式(Builder Pattern) 解决了 构造方法参数混乱、可选参数处理困难、扩展性差 等问题,适用于 创建复杂对象

📌 核心要点:
✔️ 将对象构造过程与对象本身分离
✔️ 支持链式调用,避免构造方法重载
✔️ 可读性高,易扩展,适用于可选参数多的场景
✔️ 在 JDK(StringBuilder)、Spring(BeanDefinitionBuilder)中广泛应用

如果你正在开发 配置类、数据库连接类、复杂的实体类,不妨试试 生成器模式,让你的代码更加优雅!💡


💬 你在开发中遇到过哪些对象创建的痛点?欢迎在评论区交流! 🚀

👉 觉得有用?欢迎点赞 + 关注,更多设计模式干货持续更新! 💡

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

相关文章:

  • 微信 网页版优化系统
  • 如何在 Linux 中更改用户的默认主目录 ?
  • AI人工智能进阶——解读80页DeepSeek应用与部署【附全文阅读】
  • 建网站需要什么服务器合肥知名网站制作公司
  • 安卓基础组件022-ViewPager2
  • 怎样做模具钢网站做怎么网站推广
  • Java学习之旅第一季-28:Java基础语法测试题
  • 网站上的flv视频看不了百度网站两两学一做心得体会
  • 【QDialog】对话框
  • 无重复字符的最长字串 Java
  • 做网站读哪个专业企业注册名字查询
  • 机器视觉Halcon3D读取3D点云数据后的三维对象模型检查参数详解
  • 什么是商业网站湖北黄石市黄石市建设材料价格信息在哪个网站查询
  • Polyglot 全解析:多语言处理的利器与中文支持实践
  • 湖北省住房和城乡建设厅官方网站栖霞企业网站建设
  • 吕梁seo网站建设网站开发的技术支撑 经验能力
  • VAE-NPN跨域室内定位的实战与思考
  • 题库批量(文件)导入接口文档(补充)
  • Day93 基本情报技术者 单词表29 ビッグデータ基礎
  • 网站制作是不是要一个后台wordpress的目录结构
  • 域名对网站有什么影响吗在线网址免费的
  • 什么网站做h5没有广告国内免费saas crm正在
  • 【成功解决windows端tensorrt报错】Unable to load library: nvinfer_builder_resource.dll
  • 企业网站设计与建设中国建盏大师排名
  • 崇文企业网站建设公司国内设计师个人网站欣赏
  • 操作系统应用开发(十九)RustDesk 强制认证—东方仙盟金丹期
  • 西安东郊做网站有瀑布流的网站
  • 南海网站设计注册企业邮箱哪家最好
  • 这个TortoiseSVN报错是由以下主要原因导致的:路径中包含了一个无效的控制字符 0x7f。下面为您详细解释:1. 根本原因:无效的控制字符 0x7f•
  • 服务端渲染SSR