编程自学指南:java程序设计开发,Java 建造者模式,建造者模式的核心思想:分步构建复杂对象,区分建造者与工厂模式,建造者模式优化对象创建,处理可选参数

编程自学指南:java程序设计开发,Java 建造者模式详解课件

一、课程信息

学习目标

  1. 理解建造者模式的核心思想:分步构建复杂对象
  2. 掌握四大核心角色的设计方法
  3. 能通过建造者模式优化对象创建,处理可选参数
  4. 区分建造者与工厂模式的适用场景

二、课程导入:生活中的 "组装"

🌰 场景 1:组装电脑

  • 传统方式:通过构造器一次性传入所有参数(CPU、内存、硬盘...)

    java

    new Computer("i7", "16G", "512G SSD", "RTX3060"); // 参数顺序易混淆
    
  • 问题:参数多且有可选配置时,构造器臃肿
  • 建造者方案:分步设置配置,最后统一组装

三、核心概念与角色

1. 模式定义

将一个复杂对象的构建过程与其表示分离,允许同样的构建过程创建不同的表示。
核心:通过分步设置参数,统一组装对象

2. 四大核心角色

角色名称作用电脑组装案例
产品复杂对象(最终要创建的对象)Computer
抽象建造者声明构建步骤的抽象方法ComputerBuilder接口
具体建造者实现构建步骤,提供获取产品的方法HighEndBuilderBudgetBuilder
指挥者控制构建流程(可选)Director类(组装流程控制)

四、基础实现与案例

🔧 案例 1:电脑组装(基础版)

步骤 1:定义产品类
class Computer {
    private String cpu;
    private String ram;
    private String disk;
    private String gpu;

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

    // 省略getter和toString
}
步骤 2:定义建造者(静态内部类)
static class Builder {
    private String cpu;
    private String ram = "8G"; // 默认值
    private String disk = "256G SSD";
    private String gpu;

    public Builder setCpu(String cpu) {
        this.cpu = cpu;
        return this; // 支持链式调用
    }

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

    public Computer build() {
        // 校验必要参数
        if (cpu == null) {
            throw new IllegalStateException("CPU是必需的");
        }
        return new Computer(this);
    }
}
步骤 3:客户端使用
Computer highEnd = new Computer.Builder()
    .setCpu("i9")
    .setRam("32G")
    .setDisk("1T SSD")
    .setGpu("RTX4090")
    .build();

Computer budget = new Computer.Builder()
    .setCpu("i5")
    .build(); // 使用默认内存和硬盘

🔍 建造者模式优势

  1. 参数可选:可选参数通过 setter 设置,必选参数在 build 时校验
  2. 可读性:参数含义明确,避免构造器参数顺序错误
  3. 扩展性:新增参数只需修改建造者,不影响已有代码

五、进阶:链式调用与流式 API

案例 2:用户注册(可选参数处理)

class User {
    private final String username;
    private final String password;
    private final int age;
    private final String email;

    private User(Builder builder) {
        this.username = builder.username;
        this.password = builder.password;
        this.age = builder.age;
        this.email = builder.email;
    }

    // 建造者链式调用
    public static class Builder {
        private final String username;
        private final String password;
        private int age = 18;
        private String email;

        public Builder(String username, String password) {
            this.username = username;
            this.password = password;
        }

        public Builder age(int age) {
            this.age = age;
            return this;
        }

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

        public User build() {
            return new User(this);
        }
    }
}
客户端调用(流式风格)
User user = new User.Builder("张三", "123456")
    .age(20)
    .email("zhangsan@example.com")
    .build();

六、建造者 vs 工厂模式

特性工厂模式建造者模式
创建方式直接生成对象分步设置参数后生成
适用对象简单对象复杂对象(多参数、可选参数)
核心对象创建抽象化构建过程表示分离

七、JDK 中的建造者模式

1. StringBuilder

new StringBuilder()
    .append("Hello")
    .append(" ")
    .append("World")
    .toString(); // 最终构建String对象

2. Calendar

Calendar.getInstance()
    .set(2023, Calendar.OCTOBER, 1); // 分步设置时间

八、适用场景与优缺点

✅ 优点

  1. 复杂对象构建清晰:分步操作,逻辑分明
  2. 默认值支持:可选参数可设置默认值
  3. 线程安全:构建过程与对象使用分离

⚠️ 缺点

  • 类数量增加:每个产品需对应一个建造者
  • 过度设计:简单对象使用会增加代码复杂度

🔥 适用场景

  1. 参数众多的对象:如 SQL 查询条件、HTTP 请求参数
  2. 不可变对象构建:确保对象创建后不可修改(如User类字段用final

九、课堂练习

练习 1:优化手机配置

需求

  • Phone类包含brandcpurambattery(电池容量)
  • 使用建造者模式,brandcpu为必选参数,其他为可选

练习 2:实现不可变的Order

要求

  • 订单包含orderIduserIdamountstatus(状态)
  • 通过建造者模式创建,创建后字段不可修改

十、课程总结

知识图谱:

建造者模式  
   ↳ 核心:分步构建,分离构建与表示  
   ↳ 角色:产品、建造者、指挥者(可选)  
   ↳ 优势:参数可选、可读性强、易扩展  
   ↳ 与工厂区别:处理复杂对象 vs 简单对象  

口诀记忆:

“建造者,分步造,复杂对象不用愁,
链式调用参数明,必选可选分得清,
最后 build 来组装,对象创建更优雅!”

十一、课后作业

必做 1:实现图书信息建造者

需求

  • Book类包含titleauthorpricepublisher(出版社)
  • 使用建造者模式,titleauthor为必选,其他可选

必做 2:分析 Lombok 的 @Builder 注解

任务

  1. 引入 Lombok 依赖,用@Builder注解简化建造者实现
  2. 对比手写建造者与 Lombok 生成代码的差异
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值