Java 设计模式详解:工厂模式与建造者模式的对比分析

部署运行你感兴趣的模型镜像

在学习 Java 设计模式时,很多同学经常会混淆 工厂模式建造者模式
它们同属于创建型模式,但关注点完全不同:工厂更像是点外卖——告诉工厂要“游戏电脑”还是“办公电脑”,立刻给你成品;建造者则像是定制套餐——一步步选择 CPU、显卡、内存,最后组装成完整机器。

这篇文章,我将通过 原理对比 + Java 代码示例 + 优缺点分析,带你彻底搞懂二者的区别。


一、工厂模式(Factory Pattern)

1. 核心思想

  • 客户端只需告诉工厂“我要什么类型”,工厂直接返回成品对象。

  • 适合对象结构不复杂、只需要选择不同类型的场景。

2. Java 示例代码

// 产品类
class Computer {
    private String cpu;
    private String gpu;
    private String ram;

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

    public void showConfig() {
        System.out.println("CPU: " + cpu + ", GPU: " + gpu + ", RAM: " + ram);
    }
}

// 工厂类
class ComputerFactory {
    public static Computer createComputer(String type) {
        switch (type.toLowerCase()) {
            case "gaming":
                return new Computer("i9 CPU", "RTX 4090", "64GB RAM");
            case "office":
                return new Computer("i5 CPU", "集成显卡", "16GB RAM");
            default:
                return null;
        }
    }
}

// 客户端
public class FactoryDemo {
    public static void main(String[] args) {
        Computer gaming = ComputerFactory.createComputer("gaming");
        Computer office = ComputerFactory.createComputer("office");

        gaming.showConfig();
        office.showConfig();
    }
}

输出:

CPU: i9 CPU, GPU: RTX 4090, RAM: 64GB RAM
CPU: i5 CPU, GPU: 集成显卡, RAM: 16GB RAM

二、建造者模式(Builder Pattern)

1. 核心思想

  • 关注对象的 组装过程,可以一步步灵活指定配置。

  • 适合构造复杂对象,尤其是需要定制化的场景。

2. Java 示例代码

// 建造者
class ComputerBuilder {
    private String cpu;
    private String gpu;
    private String ram;

    public ComputerBuilder setCpu(String cpu) {
        this.cpu = cpu;
        return this;
    }

    public ComputerBuilder setGpu(String gpu) {
        this.gpu = gpu;
        return this;
    }

    public ComputerBuilder setRam(String ram) {
        this.ram = ram;
        return this;
    }

    public Computer build() {
        return new Computer(cpu, gpu, ram);
    }
}

// 客户端
public class BuilderDemo {
    public static void main(String[] args) {
        Computer gaming = new ComputerBuilder()
                .setCpu("i9 CPU")
                .setGpu("RTX 4090")
                .setRam("64GB RAM")
                .build();

        Computer office = new ComputerBuilder()
                .setCpu("i5 CPU")
                .setGpu("集成显卡")
                .setRam("16GB RAM")
                .build();

        gaming.showConfig();
        office.showConfig();
    }
}

输出:

CPU: i9 CPU, GPU: RTX 4090, RAM: 64GB RAM
CPU: i5 CPU, GPU: 集成显卡, RAM: 16GB RAM

三、工厂模式 vs 建造者模式 对比

对比项工厂模式(Factory)建造者模式(Builder)
关注点选择并创建某一类对象一步步组装复杂对象
产品复杂度产品结构简单,直接 new 出来即可产品往往由多个部件/步骤组成
客户端角色只关心“要什么型号”可以灵活指定“配置/步骤”
适用场景- 多个子类/实现类
- 需要隐藏创建逻辑
- 对象构造复杂
- 对象需要灵活配置
优点- 简化对象创建
- 隐藏 new 逻辑
- 统一管理产品
- 更灵活
- 可以复用建造步骤
- 易于扩展配置
缺点- 扩展产品需要改工厂代码
- 配置不够灵活
- 类数量多
- 对简单对象反而臃肿
类比点外卖 🍔 → 直接拿到套餐定制套餐 🍱 → 选主食、小菜、饮料

四、总结

  • 工厂模式:适合“成品化”场景,客户端只需知道要什么型号,不关心构造细节。

  • 建造者模式:适合“定制化”场景,客户端可以一步步配置,灵活度更高。

👉 所以,如果你的对象像点外卖一样,选个类型就能直接用,那用工厂模式;如果像定制套餐一样,需要自己组合配置,那用建造者模式。

五、实际项目中的应用场景

1. 工厂模式应用案例

在 Java 开发中,工厂模式几乎无处不在:

建造者模式常用于 对象构建复杂、参数多且灵活 的场景。


2. 建造者模式应用案例

  • Spring 的 BeanFactory / ApplicationContext
    Spring 中的 BeanFactory 就是典型的工厂模式。我们只需要提供 Bean 的名字或类型,Spring 容器就会把实例化好的对象交给我们:

    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    UserService userService = context.getBean("userService", UserService.class);
    

  • 👉 开发者不需要关心对象是怎么创建的(构造函数、依赖注入等),Spring 工厂帮你完成。

  • JDBC 的 DriverManager
    通过 DriverManager.getConnection(url, user, password) 获取数据库连接,本质也是工厂方法模式。不同数据库(MySQL、Oracle)返回的都是 Connection 接口的不同实现类。

  • Lombok 的 @Builder 注解
    我们经常在实体类上加上 @Builder,这就是建造者模式的自动化实现:

    @Builder
    public class User {
        private String name;
        private int age;
        private String email;
    }
    
    // 使用方式
    User user = User.builder()
                    .name("张三")
                    .age(20)
                    .email("zhangsan@test.com")
                    .build();
    

👉 记住一句话:

  • 👉 这种方式比写一堆构造函数要优雅得多,特别适合字段很多的对象。

  • StringBuilder / StringBuffer
    这两个类就是典型的建造者模式。我们通过一连串的 append() 调用,最后生成需要的字符串。

    String result = new StringBuilder()
                        .append("Hello ")
                        .append("World ")
                        .append(2025)
                        .toString();
    

    六、最后总结

  • 工厂模式:隐藏了对象创建逻辑,客户端只需“点单”,工厂负责“做菜”。(Spring BeanFactory、JDBC DriverManager)

  • 建造者模式:关注对象的组装过程,支持链式调用和灵活定制。(Lombok @Builder、StringBuilder)

  • 工厂模式 = 点外卖(我要现成的成品)

  • 建造者模式 = 定制套餐(我要灵活组合配置)

  • 写代码就像点餐:工厂模式让你点好套餐直接开吃,建造者模式让你自由搭配成专属口味。关键是——你要吃饱,还要吃好。

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值