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 模式可以确保对象的所有字段在构建后都是不可变的。

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

相关推荐
用户13051807121516 分钟前
JDBC学习DAY2:从Statement到PreparedStatement
java
蛋蛋的就会顺顺的44 分钟前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
周杰偷奶茶1 小时前
【Java】数组的定义和使用(附管理系统实战案例)
java·开发语言
橙子圆1232 小时前
JUC之集合类不安全
java·开发语言
谢亮_vipxieliang3 小时前
Stream API 不是银弹:常见坑与性能建议
java·开发语言
源码宝3 小时前
Web‑PACS 云影像源码|Java+Vue3 医院影像管理系统完整方案
java·源码·影像pacs·成品源码·医院影像系统
ShineWinsu3 小时前
对于Redis:string类型的解析
java·c++·redis·分布式·缓存·面试·string
三8445 小时前
Fastjson 漏洞 · 02 · autoType 机制与 checkAutoType
java·fastjson
无限码力5 小时前
小红书笔试真题 9.17 - 待发热度重排(C++/Py/Java /Js/Go)
java·小红书·小红书笔试真题·小红书技术岗笔试真题