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 模式适合: 当对象有很多可选参数,且构建过程复杂时。

优势:

  1. 避免构造器参数过多。
  2. 可读性好,调用链直观,像搭积木一样一步步设置。
  3. 允许灵活组合参数,减少构造方法重载。
posted @ 2025-09-05 14:58  AlphaGeek  阅读(135)  评论(0)    收藏  举报