Lombok之@Builder使用

x33g5p2x  于2021-12-25 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(328)

一. 为什么要用@Builder?

当一个类的成员变量比较多,同时,大部分的成员变量有默认值,仅有少量的成员变量需要初始化时,我们该如何设计这个类?我们需要让该类满足以下两个要求:

  1. 方便用户创建复杂的对象(不需要知道实现过程),仅需要初始化必要的成员变量;
  2. 代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用)

这种需求和建造者模式的设计场景不期而合。同时,Lombok提供了@Builder注解用于快速地实现一个类的建造者模式。
讲解@Builder之前,首先,要求读者对建造者模式有一定的了解。通过简书上的《一篇文章就彻底弄懂建造者模式(Builder Pattern)》对可以建造者模式有个初步的了解,并且建造者模式的优点在于:可以将构造器的setter方法名取成类似注释的方式,这样我们可以很清晰的知道刚才究竟设置的什么值,可读性较高。
从@Builder的源码和官网的介绍来看,我觉得@Builder的实用性不如它的另一个注解@Accessors。因为@Builder能做到的,@Accessors也能做到,并且理解起来简单(希望有前辈能做更具体详细的解释,这两个注释,从我的理解来看,我更倾向于@Accessors)。@Builder在创建对象时具有链式赋值的特点,但是在创建对象后,就不能链式赋值了,只能采用setter方法,虽然toBuilder注解属性可以复用对象的成员变量值,但是却返回一个新的对象,这不是我们所希望看到的。然而,@Accessors却可以在任何时候对对象的成员变量实现链式赋值。如果是对实用性看重的读者,可以直接跳转至《Lombok实验室之@Accessors使用》。
不过,建造者模式在源码中十分常见,特别是在各类数据源的创建过程中,掌握它更有利于阅读源码。

二. @Builder如何使用?

可以直接阅读该文《Lombok 实战 —— @Builder》,该博主也有Lombok的系列文章,推荐读者阅读。

三. @Builder源码

四. 特别说明

本文已经收录在Lombok注解系列文章总览中,并继承上文中所提的特别说明。
源码地址:gitee

相关文章