使用建造者模式创建对象

下面这段代码是在使用 建造者模式(Builder Pattern) 来创建一个 EmployeeLoginVO 对象。它通过链式调用的方式,把字段一个个"塞"进去,最后调用 .build() 方法一次性生成对象。


✅ 它在干什么?

java 复制代码
EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder()
        .id(employee.getId())
        .userName(employee.getUsername())
        .name(employee.getName())
        .token(token)
        .build();

等价于:

java 复制代码
EmployeeLoginVO employeeLoginVO = new EmployeeLoginVO();
employeeLoginVO.setId(employee.getId());
employeeLoginVO.setUserName(employee.getUsername());
employeeLoginVO.setName(employee.getName());
employeeLoginVO.setToken(token);

更简洁、可读性更强、避免构造参数混乱


✅ 怎样才能实现这种写法?

你需要在 EmployeeLoginVO 类上使用 Lombok@Builder 注解。

✅ 步骤如下:
1. 引入 Lombok(如果还没引入)

Maven 示例:

xml 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>
2. 定义 VO 类
java 复制代码
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class EmployeeLoginVO {
    private Long id;
    private String userName;
    private String name;
    private String token;
}

✅ 总结一句话:

你之所以能写成 EmployeeLoginVO.builder()...build(),是因为你用了 Lombok 的 @Builder 注解,它帮你自动生成了建造者模式的代码。


🔍 拓展:不想用 Lombok?

你也可以手写 Builder 模式,但代码量会多很多。比如:

java 复制代码
public class EmployeeLoginVO {
    private Long id;
    private String userName;
    private String name;
    private String token;

    private EmployeeLoginVO(Builder builder) {
        this.id = builder.id;
        this.userName = builder.userName;
        this.name = builder.name;
        this.token = builder.token;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {
        private Long id;
        private String userName;
        private String name;
        private String token;

        public Builder id(Long id) {
            this.id = id;
            return this;
        }

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

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

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

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

✅ 结论:

  • 用 Lombok 的 @Builder 是最简洁的方式。
  • 不想用 Lombok 就手写 Builder 类,但麻烦。

相关推荐
xcLeigh37 分钟前
Go入门:变量声明的五种方式详解
java·开发语言·golang
AI大模型-小华1 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
Mark_ZP2 小时前
【锁1】Synchronized vs ReentrantLock区别
java
立心者02 小时前
SpringBoot中使用TOTP实现MFA(多因素认证)
java·spring boot·后端
枕星而眠2 小时前
C++ STL Map容器完全指南:从有序红黑树到无序哈希表
java·开发语言
逃逸线LOF3 小时前
Spring配置数据源{连接池}(Druid、c3p0)
java·数据库·spring
bbq粉刷匠3 小时前
HashMap 底层原理深度拆解(二):putVal 完整链路解析(懒加载 · 链表遍历 · 尾插法)
java·开发语言·哈希算法
Sam_Deep_Thinking4 小时前
一个靠谱的C端网关服务应该包含什么内容
java·程序员·系统架构
杨运交4 小时前
[055][调度模块]Spring动态任务调度框架的设计与实现
java·后端·spring
白狐_7984 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法