[Java实战经验]链式编程与Builder模式

news/2025/5/24 1:39:25

目录

  • 链式编程
  • Builder模式

链式编程

链式编程(Fluent AP)是一种编程风格,它通过在同一个对象上连续调用多个方法来执行一系列操作(让方法返回对象本身return this))。这种风格的编程使代码更加简洁,提高了代码的可读性和可维护性。

允许使用Lombok的团队可以使用@Accessors(chain = true)注解,让setter方法返回this,从而实现链式调用。

Builder模式

当对象构造方法入参很多、构造对象过程复杂时,此时构造方法可读性差,需要为不同的参数组合定义多个重载构造方法,构造方法爆炸。

此时,使用构造模式来代替构造方法创建对象。
即,创建静态内部类Builder,通过链式编程分步设置参数,最终通过build()方法创建目标对象。

示例如下:

public class User {// 必选参数private final String name;// 可选参数private final int age;private final String address;private final String phone;// 私有构造方法,只能通过 Builder 构建private User(Builder builder) {this.name = builder.name;this.age = builder.age;this.address = builder.address;this.phone = builder.phone;}// 静态内部 Builder 类public static class Builder {// 必选参数(通常通过构造方法传入)private final String name;// 可选参数(设置默认值)private int age = 0;private String address = "";private String phone = "";// 必选参数构造public Builder(String name) {this.name = name;}// 链式设置方法(返回 Builder 自身)public Builder age(int age) {this.age = age;return this;}public Builder address(String address) {this.address = address;return this;}public Builder phone(String phone) {this.phone = phone;return this;}// 最终构建方法public User build() {return new User(this);}}// Getter 方法(略)
}

在允许使用Lombok的团队,可以使用Lombok 简化代码,即通过 @Builder 注解自动生成 Builder 类。

import lombok.Builder;
import lombok.Getter;@Getter
@Builder
public class User {private final String name;private final int age;private final String address;private final String phone;
}// 使用
User user = User.builder().name("Alice").age(25).address("上海").build();

https://dhexx.cn/news/show-5497590.html

相关文章

多模态大模型文字识别 vs OCR识别模型

论文简述 多模态大语言模型(Multimodal Large Language Models,简称多模态LLMs)具有高度通用性,能够处理图像描述、文档分析和自动化内容生成等多种任务。这种广泛的适用性使其在不同工业领域都受到了大量关注。 在OCR方面,多模态LLMs的表现超过了专门为OCR设计的模型。这…

Qt/C++学习系列之QTreeWidget的简单使用记录

Qt/C学习系列之QTreeWidget的简单使用记录 前言1布局1.1布局要求1.2布局代码 2代码设计2.1整体勾选2.2勾选项确认 总结 前言 自己练手的项目中,需要对多个不同层级的选项进行勾选操作,而想到简洁点的操作方式就是使用QTreeWidget进行布局与应用。这里简…

Spring Boot 项目三种打印日志的方法详解。Logger,log,logger 解读。

目录 一. 打印日志的常见三种方法? 1.1 手动创建 Logger 对象(基于SLF4J API) 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口(使用频率较低) 二. 常见的 Logger,logger,…

C++: Initialization and References to const 初始化和常引用

cpp primer 5e, P97. 理解 这是一段很容易被忽略、 但是又非常重要的内容。 In 2.3.1 (p. 51) we noted that there are two exceptions to the rule that the type of a reference must match the type of the object to which it refers. The first exception is that we …

Vue 人看 React useRef:它不只是替代 ref

如果你是从 Vue 转到 React 的开发者,初见 useRef 可能会想:这不就是 React 版的 ref 吗?但真相是 —— 它能做的,比你想象得多得多。 👀 Vue 人初见 useRef 在 Vue 中,ref 是我们访问 DOM 或响应式数据的…

(51单片机)LCD显示日期时间时钟(DS1302时钟模块教学)(LCD1602教程)

目录 源代码 main.c LCD1602.c LCD1602.h DS1302.c DS1302.h 代码解析与教程: LCD1602模块 DS1302模块 效果视频: 源代码 如上图将5个文放在Keli5 中即可,然后烧录在单片机中就行了 烧录软件用的是STC-ISP,不知道怎么安装的…

scikit-learn初探

KFold k交叉验证,k-1个作为训练集,剩下的作为测试集 split split(X, yNone, groupsNone)X: (n_samples, n_features)的矩阵,行数为n_samples,列数为n_features y:(n_samples,)为列向量,表示监…

Bad Request 400

之前一直以为400就是前端代码有问题 这下遇到了,发现是因为前后端不一致 后端代码注意:现在我写的int 前端请求 原因 :前后端不一致 💡 问题核心:后端 amount 类型是 int,但前端传了小数 237.31

大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机

摘要 大象机器人全新推出轻量级高性能教育机械臂 myCobot 280 RDK X5,该产品集成地瓜机器人 RDK X5 开发者套件,深度整合双方在硬件研发与智能计算领域的技术优势,实现芯片架构、软件算法、硬件结构的全栈自主研发。作为国内教育机器人生态合…

决策树简介

【理解】决策树例子 决策树算法是一种监督学习算法,英文是Decision tree。 决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的else就是一种选择或决策。程序设计中的…