Builder设计模式的概念与示例详解,一文带你彻底弄懂Builder模式。
Builder模式概念与披萨示例
1. Builder 模式的概念
Builder 模式(建造者模式)是一种创建型设计模式,它的核心思想是:
- 把复杂对象的构建过程和它的表示分离,使得同样的构建过程可以创建不同的表示。
- 通俗讲:当对象构造参数很多,且不同组合会生成不同实例时,使用 Builder 模式可以避免构造方法参数过多的问题,并让代码更清晰。
特点:
- 使用链式调用一步步设置属性。
- 最终用
build()方法统一生成对象。 - 代码可读性强,避免“构造器参数爆炸”。
2. 一个直观的例子:创建一份“披萨”
没用 Builder 的写法(不好看)
public class Pizza {
private String size; // 尺寸: 小/中/大
private boolean cheese;
private boolean pepperoni;
private boolean bacon;
public Pizza(String size, boolean cheese, boolean pepperoni, boolean bacon) {
this.size = size;
this.cheese = cheese;
this.pepperoni = pepperoni;
this.bacon = bacon;
}
}
// 客户端调用
Pizza pizza = new Pizza("大", true, false, true);
问题:
- 构造函数参数太多,不直观。
- 看到
true, false, true,很难知道是啥意思。
使用 Builder 模式
public class Pizza {
private String size;
private boolean cheese;
private boolean pepperoni;
private boolean bacon;
// 私有构造函数,只能通过Builder来创建
private Pizza(Builder builder) {
this.size = builder.size;
this.cheese = builder.cheese;
this.pepperoni = builder.pepperoni;
this.bacon = builder.bacon;
}
public static class Builder {
private String size;
private boolean cheese;
private boolean pepperoni;
private boolean bacon;
public Builder setSize(String size) {
this.size = size;
return this;
}
public Builder addCheese(boolean cheese) {
this.cheese = cheese;
return this;
}
public Builder addPepperoni(boolean pepperoni) {
this.pepperoni = pepperoni;
return this;
}
public Builder addBacon(boolean bacon) {
this.bacon = bacon;
return this;
}
public Pizza build() {
return new Pizza(this);
}
}
@Override
public String toString() {
return "Pizza{" +
"size='" + size + ''' +
", cheese=" + cheese +
", pepperoni=" + pepperoni +
", bacon=" + bacon +
'}';
}
}
客户端调用
public class Main {
public static void main(String[] args) {
Pizza pizza = new Pizza.Builder()
.setSize("大") // 设置尺寸
.addCheese(true) // 加芝士
.addPepperoni(false) // 不加意大利香肠
.addBacon(true) // 加培根
.build(); // 完成构建
System.out.println(pizza);
}
}
输出:
Pizza{size='大', cheese=true, pepperoni=false, bacon=true}
3. 小结
Builder 模式适合: 当对象有很多可选参数,且构建过程复杂时。
优势:
- 避免构造器参数过多。
- 可读性好,调用链直观,像搭积木一样一步步设置。
- 允许灵活组合参数,减少构造方法重载。

浙公网安备 33010602011771号