SSMSSM
首页
  • 我的博客
  • 我的Github
首页
  • 我的博客
  • 我的Github
  • Java反射技术
  • 动态代理模式
  • 设计模式简介
  • 责任链模式
  • 观察者模式
  • 工厂模式与抽象工厂模式
  • 建造者模式
  • Web开发历史
  • Mybatis核心组件
  • Mybatis的反射
  • Mybatis配置

建造者模式

  • 传统方式 vs 建造者模式
  • 不使用建造者模式
  • 使用建造者模式
  • 总结

传统方式 vs 建造者模式

对比维度传统构建方式建造者模式
对象创建方式使用构造函数或 setter 方法使用链式 Builder 类构建对象
适合场景简单对象,参数较少复杂对象,参数多且可选组合多样
可读性差,参数过多时调用容易出错高,链式调用清晰明了
灵活性低,构造函数固定或需要多个重载高,可自由组合构建
代码扩展性差,添加参数需改多个构造方法好,只需修改 Builder
线程安全性一般需额外处理Builder 可封装成不可变对象,便于控制
对象是否可变常为可变对象(有 set 方法)可生成不可变对象(没有 set 方法)
构造逻辑封装分散在构造函数或外部集中在 Builder 中,逻辑清晰
构造时校验能力通常需要外部判断可以在 build() 中集中校验

不使用建造者模式

package com.learn.ssm.chapter2.reflect.builder;

public class Computer {
    private String cpu;
    private String ram;
    private String storage;
    private String gpu;

    public Computer(String cpu, String ram, String storage, String gpu) {
        this.cpu = cpu;
        this.ram = ram;
        this.storage = storage;
        this.gpu = gpu;
    }

    public void showConfig() {
        System.out.println("CPU: " + cpu);
        System.out.println("RAM: " + ram);
        System.out.println("Storage: " + storage);
        System.out.println("GPU: " + gpu);
    }
}
package com.learn.ssm.chapter2.reflect.builder;

public class Main {
    public static void main(String[] args) {
        Computer computer = new Computer("Intel i9", "32GB", "1TB SSD", "NVIDIA RTX 4090");
        computer.showConfig();
        /**
         * CPU: Intel i9
         * RAM: 32GB
         * Storage: 1TB SSD
         * GPU: NVIDIA RTX 4090
         */
    }
}

使用建造者模式

package com.learn.ssm.chapter2.reflect.builder;

public class Computer {
    private String cpu;
    private String ram;
    private String storage;
    private String gpu;

    // 构造方法私有,只能通过 Builder 创建
    private Computer(Builder builder) {
        this.cpu = builder.cpu;
        this.ram = builder.ram;
        this.storage = builder.storage;
        this.gpu = builder.gpu;
    }

    // 静态内部类 Builder
    public static class Builder {
        private String cpu;
        private String ram;
        private String storage;
        private String gpu;

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

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

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

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

        public Computer build() {
            return new Computer(this);
        }
    }


    public void showConfig() {
        System.out.println("CPU: " + cpu);
        System.out.println("RAM: " + ram);
        System.out.println("Storage: " + storage);
        System.out.println("GPU: " + gpu);
    }
}
package com.learn.ssm.chapter2.reflect.builder;

public class Main {
    public static void main(String[] args) {
        Computer builder = new Computer.Builder()
                .setCPU("Intel i9")
                .setRAM("32GB")
                .setStorage("1TB SSD")
                .setGPU("NVIDIA RTX 4090")
                .build();
        builder.showConfig();
        /**
         * CPU: Intel i9
         * RAM: 32GB
         * Storage: 1TB SSD
         * GPU: NVIDIA RTX 4090
         */
    }
}

总结

优点:如果对象的属性较多,创建实例传参时不需要记住顺序。

最近更新:: 2025/10/16 08:05
Contributors: fireworks99
Prev
工厂模式与抽象工厂模式
Next
Web开发历史