23种设计模式-生成器(Builder)设计模式

工厂方法设计模式

🚩什么是生成器设计模式?

生成器模式(Builder Pattern) 是一种 创建型设计模式 ,用于构建复杂对象,并且能够一步步地构造对象,而无需直接使用构造函数传递大量参数。

在 Java 中,如果一个类有多个可选参数,传统方式是使用 重载构造函数Setter 方法,但这样会导致代码冗长且不易维护。

生成器模式 通过 链式调用方法返回当前对象 的方式,使代码更加清晰易读。

🚩生成器设计模式的特点

  • 支持链式调用:可以连续调用方法来设置属性,使代码更优雅。
  • 构造过程更清晰:将对象的创建步骤封装到生成器中,避免构造函数参数过多的问题。
  • 提高可读性和可维护性:使用生成器模式可以避免复杂的构造函数重载,提高代码可读性。
  • 可以对对象创建过程进行控制 :如可以添加 参数校验默认值对象克隆 等操作。

🚩生成器设计模式的结构

生成器模式通常包含以下几个部分:

  • Product(产品类):要构建的复杂对象。
  • Builder(抽象生成器):定义构建对象的步骤。
  • ConcreteBuilder(具体生成器):实现 Builder 接口,并定义如何创建 Product 对象。

🚩生成器设计模式的优缺点

✅ 优点

  • 避免构造方法参数过多的问题,提供更优雅的对象创建方式。
  • 可以设置默认值,构造对象时不必提供所有参数。
  • 可读性强,通过链式调用,使代码更直观。
  • 解耦对象构建和表示,使代码更容易扩展和维护。

❌ 缺点

  • 增加代码复杂度:需要额外定义 Builder 类,代码量比直接使用构造函数多。
  • 对象构造过程比普通方法慢,因为涉及多个方法调用。

🚩生成器设计模式的Java实现

代码地址:GitHub

  • 创建一个产品类Product
java 复制代码
/**
 * @author hanson
 * @description: 定义产品类
 * @date 2025-03-23 21:08:03
 * @version: 1.0
 */
public class Product {

    List<String> parts = new ArrayList<String>();

    public void Add(String part) {
        parts.add(part);
    }

    public void show() {
        System.out.println("产品的组成:");
        for (String part : parts) {
            System.out.println(part + " ");
        }
        System.out.println("\n");
    }
}
  • 创建一个抽象建造者类,里面有两个抽象方法,用于构建产品和打印结果
java 复制代码
/**
 * @author hanson
 * @description: 生成器(Builder 类)
 * @date 2025-03-23 21:10:30
 * @version: 1.0
 */
public abstract class Builder {

    public abstract void BuildPart();

    public abstract Product getResult();
}
  • 创建两个构造器不通的实现类,用于构建不同的产品

    • 具体构造器Builder1
    java 复制代码
    /**
     * @author hanson
     * @description: 具体构建者1
     * @date 2025-03-23 21:17:56
     * @version: 1.0
     */
    public class Builder1 extends Builder{
    
        Product product = new Product();
    
        @Override
        public void BuildPart() {
            product.Add("A");
            product.Add("B");
            product.Add("C");
            product.Add("D");
            product.Add("E");
            product.Add("F");
        }
    
        @Override
        public Product getResult() {
            return product;
        }
    }
    • 具体构造器Builder2
    java 复制代码
    /**
     * @author hanson
     * @description: 具体构建者2
     * @date 2025-03-23 21:19:00
     * @version: 1.0
     */
    public class Builder2 extends Builder{
    
        Product product = new Product();
    
        @Override
        public void BuildPart() {
            product.Add("A");
            product.Add("B");
            product.Add("C");
        }
    
        @Override
        public Product getResult() {
            return product;
        }
    }
  • 创建一个指挥Director用于负责Builder 创建

java 复制代码
/**
 * @author hanson
 * @description: 指挥者 负责组织 Builder 的构建过程。
 * @date 2025-03-23 21:16:35
 * @version: 1.0
 */
public class Director {

    public void Construct(Builder builder){
        builder.BuildPart();
    }
}

📌 运行结果

🚩代码总结

  • Director(指挥者) 负责组织 Builder 的构建过程。
  • Builder(抽象构造者) 规定了 BuildPart()getResult() 方法。
  • Builder1 和 Builder2(具体构造者) 提供不同的 Product 实现方式。
  • Product(产品类) 通过 List<String> 存储构造的部分,并在 show() 方法中打印结果。

🚩总结

  • 生成器模式(Builder Pattern)创建型设计模式 ,用于构建 复杂对象
  • 分离了对象的创建和表示 ,提高了 代码可读性可维护性
  • 适用于 多个可选参数 的对象构造,避免构造方法重载的困扰。
  • 在 Java 中,常见于 StringBuilderLombok @BuilderJackson ObjectMapper 等应用。

✅ 适用场景:

  • 需要创建 包含多个参数 的复杂对象。
  • 需要构建 不可变对象
  • 希望提供更清晰的 API,提高代码可读性。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

相关推荐
wzdark18 分钟前
基于链表的内存池设计与内存复用机制4
java·数据结构·链表
cnkeysky1 小时前
idea 中的 maven 项目重新加载子模块
java·idea
Escalating_xu1 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
今天AI了吗1 小时前
什么是 AI Agent?它与直接调用大模型 API 有何区别
java·网络·人工智能·架构·java-ee
隐退山林1 小时前
JavaEE进阶:SpringAOP
java·java-ee
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之方法级安全注解
java·安全·spring
JavacKaka1 小时前
LiteFlow规则引擎实战博客-2026-09-09
java
学渣超1 小时前
记一次复杂业务功能重构——从过程式长链路,到模板方法构建体系
java·架构·代码规范
Bs_MoneyMagnet2 小时前
基于springboot+vue的旅游景区点评系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·旅游
夜不会漫长2 小时前
C++:类和对象(2)
java·javascript·c++