java Builder模式构建对象

Builder 模式是一种创建对象的设计模式,它通过使用多个简单的对象一步一步构建复杂对象。这种模式可以帮助构建复杂的对象,并提供更好的代码可读性和灵活性。Builder 模式特别适用于那些构造函数参数过多或参数默认值较多的类。

下面是一个使用 Builder 模式构造对象的示例代码:

示例代码

复制代码
public class Car {
    private final String brand;
    private final String model;
    private final int year;
    private final String color;
    private final double price;

    // 私有构造方法,只能通过 Builder 构造对象
    private Car(Builder builder) {
        this.brand = builder.brand;
        this.model = builder.model;
        this.year = builder.year;
        this.color = builder.color;
        this.price = builder.price;
    }

    // 静态内部类 Builder
    public static class Builder {
        private String brand;
        private String model;
        private int year;
        private String color;
        private double price;

        // Setter 方法返回 Builder 对象本身,实现链式调用
        public Builder brand(String brand) {
            this.brand = brand;
            return this;
        }

        public Builder model(String model) {
            this.model = model;
            return this;
        }

        public Builder year(int year) {
            this.year = year;
            return this;
        }

        public Builder color(String color) {
            this.color = color;
            return this;
        }

        public Builder price(double price) {
            this.price = price;
            return this;
        }

        // 构建对象的方法
        public Car build() {
            return new Car(this);
        }
    }

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", model='" + model + '\'' +
                ", year=" + year +
                ", color='" + color + '\'' +
                ", price=" + price +
                '}';
    }

    public static void main(String[] args) {
        // 使用 Builder 模式创建 Car 对象
        Car car = new Car.Builder()
                .brand("Tesla")
                .model("Model S")
                .year(2022)
                .color("Red")
                .price(79999.99)
                .build();

        System.out.println(car);
    }
}

代码解释

  1. Car 类:

    • 定义了最终的不可变对象 Car,包括 brand、model、year、color 和 price 属性。
    • 构造方法是私有的,只能通过 Builder 来构造 Car 对象。
  2. Builder 静态内部类:

    • 提供了一组链式调用的 Setter 方法,用于设置 Car 的属性。
    • 提供一个 build 方法,用于创建 Car 对象。
  3. main 方法:

    • 使用 Builder 模式创建 Car 对象,展示了链式调用的优雅性和简洁性。

优点

  1. 清晰易读:

    • 链式调用使得代码更加清晰易读,特别是当构造函数参数过多时。
  2. 可变性与灵活性:

    • 可以根据需要灵活地设置属性,而不需要提供多个重载的构造函数。
  3. 不可变对象:

    • 最终构造出的对象是不可变的(如果只提供 getter 方法),这有助于确保对象的线程安全性和稳定性。
  4. 代码维护:

    • 方便地添加新的属性,而不需要修改现有的构造函数,只需在 Builder 类中添加新的 Setter 方法。

使用场景

  • 参数过多的类:

    • 当类的构造函数参数过多时,使用 Builder 模式可以避免构造函数参数过长的问题。
  • 复杂对象的构建:

    • 当构建复杂对象时,需要多步骤设置属性,使用 Builder 模式可以简化代码,提高可读性。
  • 不可变对象的创建:

    • 创建不可变对象时,Builder 模式可以确保对象的所有字段在构建后都是不可变的。

通过这种模式,可以更清晰地组织代码,提高代码的可读性和可维护性,同时减少创建对象时可能出现的错误。

相关推荐
SL_staff1 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
三翼鸟数字化技术团队2 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java
SL_staff2 小时前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈
特立独行的猫A2 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
学长毕设2 小时前
基于SpringBoot的高校后勤报修管理系统-附源码
java·spring boot·后端
特立独行的猫A2 小时前
cj-tauri vs Rust/Tauri 同款播放器实测:编译 21 秒 vs 11 分钟,磁盘 12 MB vs 1.2 GB
java·后端·python
杨凯凡3 小时前
Spring AI RAG 实战:向量检索、租户过滤、引用溯源与防幻觉边界
java·人工智能·spring
小科先生4 小时前
Java springboot调用数据库的基本流程
java·数据库·spring boot
秋饼4 小时前
GPT-Live 全双工语音 API Java 服务端落地实战:事件协议、会话恢复与生产踩坑
java·ai·技术分享·后端开发
SL_staff4 小时前
为什么企业级自动化不能只靠AI编排?——逻辑引擎在确定性业务场景中的不可替代性
java·开源·产品