当前位置: 首页 > news >正文

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

目录

  • 链式编程
  • 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();
http://www.dtcms.com/a/133684.html

相关文章:

  • MySQL索引和事务
  • Filter、Interceptor、Spring AOP 的执行顺序
  • 深入解析Linux软件包管理:apt/yum源配置与Vim编辑器高效使用指南
  • Day08 【基于jieba分词实现词嵌入的文本多分类】
  • 维港首秀!沃飞长空AE200亮相香港特别行政区
  • XCTF-web(一)
  • 旅游特种兵迪士尼大作战:DeepSeek高精准路径优化
  • (五)机器学习---决策树和随机森林
  • C/C++运算
  • SMT贴片:现代电子制造的核心工艺
  • CASAIM与京东方达成合作,CASIAM IS智能联动AOI漏光检测攻克屏幕翘曲度及漏光检测难题
  • MuJoCo 画出机械臂末端轨迹进行可视化(附代码)
  • 编程技能:调试01,调试介绍
  • Summary
  • ES和MySQL概念对比
  • 向量数据库
  • 解锁元生代:ComfyUI工作流与云原生后端的深度融合
  • 【设计模式】观察者
  • RabbitMQ 为什么引入 Exchange 的概念, 交换机有什么作用.
  • QML与C++:基于ListView调用外部模型进行增删改查(性能优化版)
  • 【Leetcode-Hot100】最大子数组和
  • 【教程】如何使用Labelimg查看已经标注好的YOLO数据集标注情况
  • C++| 深入剖析std::list底层实现:链表结构与内存管理机制
  • VTK知识学习(51)- 交互与Widget(三)
  • 小程序获取用户总结(全)
  • ArrayList vs LinkedList,HashMap vs TreeMap:如何选择最适合的集合类?
  • CEPH配置优化建议
  • 小程序css实现容器内 数据滚动 无缝衔接 点击暂停
  • AtomNet:在极端MCU约束下基于算子设计微型模型
  • LivePortrait 使用指南:让静态照片“动”起来的魔法工具