使用建造者模式创建对象 - 教程
下面这段代码是在使用 建造者模式(Builder Pattern) 来创建一个 EmployeeLoginVO
对象。它通过链式调用的方式,把字段一个个“塞”进去,最后调用 .build()
方法一次性生成对象。
✅ 它在干什么?
EmployeeLoginVO employeeLoginVO = EmployeeLoginVO.builder()
.id(employee.getId())
.userName(employee.getUsername())
.name(employee.getName())
.token(token)
.build();
等价于:
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 示例:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
2. 定义 VO 类
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 模式,但代码量会多很多。比如:
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 类,但麻烦。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934092.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
01-Mybatis实现分页查询(手写)
01-Mybatis实现分页查询(手写)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");前端数据分页展示的特点mysql中分页的代码特点分页查询的规律原生的Mybatis…
详细介绍:K8s实践中的重点知识
详细介绍:K8s实践中的重点知识2025-10-10 12:29
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…
VUE---await的运用
通常在做VUE进行异步请求,都是使用常规的请求,然后在回调里面进行业务以及页面的渲染调整。
使用await能够简便很多,而且在循环里面使用await可以进行按顺序请求。
基础使用:在VUE组件里面,await 函数需要在 asyn…
深入解析:Oracle等待事件的sequential read和scattered read
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
深入解析:微服务通信:5大消息队列横向对比
深入解析:微服务通信:5大消息队列横向对比2025-10-10 12:06
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…
深入解析:抖音私信助手私域用户触达私信群聊小工具小程序开源
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
VS Code保存.vue文件自动格式化标签的问题
<view class="input-item align-center flex"><view class="iconfont icon-user icon" /><inputv-model="loginForm.username"class="input"type="text&…
基于最小二乘(LS)信道估计的MATLAB实现
基于最小二乘(LS)信道估计的MATLAB实现,包含误码率(BER)计算和性能分析一、算法原理与流程
1. LS信道估计核心公式其中:\(Y_p[k]\):接收导频位置的频域信号
\(X_p[k]\):发送导频位置的频域信号2. 系统模型
\(Y…
让老弟做个数据同步,结果踩了 7 个大坑!
第一天上班,老板就交给你一个艰巨的任务……你是小阿巴,刚入职一家电商公司。
第一天上班,老板就交给你一个艰巨的任务:定期把公司的订单数据同步到数据分析仓库。
一听到数据同步这 4 个字,你立刻汗流浃背了。 …
2025焊接件加工制造厂家口碑最新推荐榜:实力工艺与市场口碑
2025焊接件加工制造厂家口碑最新推荐榜:实力工艺与市场口碑一、行业背景在制造业蓬勃发展的当下,焊接件加工作为基础且关键的环节,在众多领域都发挥着至关重要的作用。从机械制造、汽车工业到航空航天、建筑工程等,…
2025 年最新推荐!依托优质运输网络的国际搬家海运公司排行榜:覆盖澳洲多地家具海运需求澳洲/悉尼/墨尔本/大型家具海运公司推荐
2025 年国际搬家海运需求持续攀升,但市场乱象让用户面临诸多抉择难题。部分服务商运输网络覆盖狭隘,偏远地区用户难享上门服务;不少企业整合能力薄弱,用户需自行对接打包、仓储、清关等环节,沟通成本陡增;更有甚…
完整教程:计算机环境、用户与系统变量
完整教程:计算机环境、用户与系统变量pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…
aardio在控件事件里获取控件ui自身对象
aardio在控件事件里获取控件ui自身对象winform.wishRadio.oncommand = function(id,event){current_status = owner.text
}
2025舒适轮胎最新推荐榜:卓越减震与静音性能的驾乘体验之选
2025舒适轮胎最新推荐榜:卓越减震与静音性能的驾乘体验之选行业背景在汽车工业蓬勃发展的当下,轮胎作为汽车与地面接触的唯一部件,其性能直接影响着车辆的安全性、舒适性和操控性。随着消费者对驾乘体验的要求不断提…
螺杆泵厂家最新推荐榜:高效耐用与技术创新实力解析
螺杆泵厂家最新推荐榜:高效耐用与技术创新实力解析在工业生产领域,螺杆泵作为关键流体输送设备,其性能表现直接影响生产效率和运营成本。随着制造业升级和技术进步,市场对螺杆泵的要求已从基础输送功能转向高效节能…
2025机械加工厂家实力排行榜:技术精度与供货效率权威测评
2025机械加工厂家实力排行榜:技术精度与供货效率权威测评随着制造业向高质量发展阶段迈进,机械加工行业正经历着深刻变革。在智能化、精密化的发展趋势下,企业对机械加工供应商的技术实力、生产精度和供货效率提出了…
2025耐磨轮胎厂家TOP5推荐:超强抓地力与持久耐用性深度
2025耐磨轮胎厂家TOP5推荐:超强抓地力与持久耐用性深度在商用车运输行业快速发展的大背景下,耐磨轮胎作为车辆运营成本的重要组成部分,其性能表现直接关系到运输效率和经济效益。随着轮胎制造技术的不断革新,2025年…