Builder如何分开java
使用Builder模式分离Java代码
Builder模式是一种创建型设计模式,用于分离复杂对象的构造过程。通过Builder模式,可以将对象的构造逻辑与表示逻辑分离,提高代码的可读性和灵活性。
定义Builder接口或抽象类 创建Builder接口或抽象类,声明构建对象各个部分的抽象方法。通常包括设置属性、构建最终对象的方法。
public interface Builder<T> {
Builder<T> setProperty1(String value);
Builder<T> setProperty2(int value);
T build();
}
实现具体Builder类 为需要构建的类实现具体的Builder。这个Builder负责创建目标对象的实例,并维护构建过程中的临时状态。
public class ProductBuilder implements Builder<Product> {
private String property1;
private int property2;
public ProductBuilder setProperty1(String value) {
this.property1 = value;
return this;
}
public ProductBuilder setProperty2(int value) {
this.property2 = value;
return this;
}
public Product build() {
return new Product(property1, property2);
}
}
定义目标类 目标类应该将构造函数私有化,强制通过Builder来创建实例。这样可以确保对象创建过程的统一性和可控性。
public class Product {
private final String property1;
private final int property2;
private Product(String property1, int property2) {
this.property1 = property1;
this.property2 = property2;
}
// getters and other methods
}
使用Builder创建对象 客户端代码通过Builder的链式调用创建对象,这种方式代码可读性强,且可以灵活地选择设置哪些属性。
Product product = new ProductBuilder()
.setProperty1("value")
.setProperty2(123)
.build();
使用静态内部类实现Builder
另一种常见的实现方式是使用静态内部类作为Builder,这种方式更简洁,适合大多数场景。
在目标类中定义静态Builder类 目标类包含一个静态内部Builder类,Builder类与目标类紧密关联,可以直接访问目标类的私有构造函数。
public class Product {
private final String property1;
private final int property2;
private Product(Builder builder) {
this.property1 = builder.property1;
this.property2 = builder.property2;
}
public static class Builder {
private String property1;
private int property2;
public Builder property1(String value) {
this.property1 = value;
return this;
}
public Builder property2(int value) {
this.property2 = value;
return this;
}
public Product build() {
return new Product(this);
}
}
}
客户端调用方式 客户端通过目标类的Builder静态内部类来创建实例,代码更加直观和简洁。
Product product = new Product.Builder()
.property1("value")
.property2(123)
.build();
Builder模式的优势
提高可读性 链式调用使代码更加清晰,每个设置方法都明确表示在设置哪个属性。
灵活性 可以只设置需要的属性,不必为所有可能的构造函数组合创建多个重载。
不变性 通过Builder构建的对象通常将字段设为final,确保对象一旦创建就不能被修改,提高线程安全性。
参数验证 可以在build()方法中添加参数验证逻辑,确保创建的对象处于有效状态。
适用于复杂对象创建
Builder模式特别适用于具有多个属性的复杂对象创建场景。当对象需要多个步骤构造或有许多可选参数时,Builder模式能显著改善代码质量。
处理可选参数 对于可选参数,Builder可以省略相应设置方法,或者在build()方法中提供默认值。
public Product build() {
String actualProperty1 = (property1 != null) ? property1 : "default";
return new Product(actualProperty1, property2);
}
支持流畅接口 Builder模式天然支持流畅接口(Fluent Interface)设计,使代码更接近自然语言,提高可读性。

Product product = new Product.Builder()
.name("Laptop")
.price(999)
.color("Silver")
.build();






