什么是Lombok
Lombok 是一个 Java 编程语言的库,它可以帮助我们生成一些常见的代码,例如 Getter、Setter、toString 等方法,以及构造方法、Builder 等模式,大大减少代码量,提高开发效率。
假如我们声明一个User类,需要为它写出对应的get和set方法:
public class User {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
而加上@Data注解后,我们就可以不用再写 Getter、Setter、toString 等方法,Lombok 会自动为我们生成这些代码,而且这些代码都是符合 Java Bean 规范的。
@Data
public class User {
private String name;
private int age;
}
// 直接使用其Setter Getter方法
User user = new User();
user.setName("John Doe");
user.setAge(30);
String name = user.getName();
int age = user.getAge();
使用 Lombok 的好处不仅仅是减少了代码量,而且代码更加简洁,更易于维护。
建造者模式
顾名思义,建造者模式就是实例化一个类对象,并且为该对象的属性赋值。相当于拼积木,把需要的零件积木(对象属性)一个一个装上去。
建造者模式的实现有很多种方法,下面是一种常见的实现方法:
public class User {
private String name;
private int age;
private String email;
private User(UserBuilder builder) {
this.name = builder.name;
this.age = builder.age;
this.email = builder.email;
}
public static class UserBuilder {
private String name;
private int age;
private String email;
public UserBuilder name(String name) {
this.name = name;
return this;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder email(String email) {
this.email = email;
return this;
}
public User build() {
return new User(this);
}
}
// getter and setter methods
}
在上面的代码中,我们定义了一个 User 类和一个 UserBuilder 静态内部类。UserBuilder 类包含了 User 类的所有属性,并通过它的 setter 方法来设置这些属性。
最后,通过 UserBuilder 类的 build() 方法来创建 User 对象:
User user = new User.UserBuilder()
.name("John")
.age(30)
.email("[email protected]")
.build();
从上面的代码可以看出,我们通过 new User.UserBuilder() 来获取一个 UserBuilder 对象,然后通过调用它的 setter 方法设置 User 对象的属性,最后通过 build() 方法创建 User 对象。
总的来说,建造者模式是一种创建复杂对象的高效方法,它可以通过分步骤的方式构建一个复杂的对象,并最终组合成一个完整的对象。
为什么需要建造者模式呢?
1.通过建造者模式创建对象时,可以根据需要只对必要的属性进行赋值,而不用对所有属性都进行赋值(定制化)。这样可以避免浪费,提高代码的可读性和可维护性。
2.同时,建造者模式还可以使代码的执行效率更高,因为创建对象时不需要重复地调用多个 setter 方法,而是只需要调用一次 build() 方法即可。
利用Lombok实现建造者模式
显然以上那种实现建造者模式的方法构建一个对象显得代码臃肿,这时候Lombok便可大展神威了。
@Builder 注解是 Lombok 中的另一个强大功能,可以帮助我们构建复杂对象。
还是上述的User类:
import lombok.Builder;
import lombok.ToString;
@Builder
@Data
public class User {
private String name;
private int age;
private String email;
}
创建User对象:
User user = User.builder()
.name("John")
.age(30)
.email("[email protected]")
.build();
使用 @Builder 注解后,Lombok 会自动为我们生成一个 Builder 类,我们可以通过该类的方法链式调用来设置 Book 对象的字段值,最后调用 build() 方法来创建 Book 对象。
可以注意到使用@Builder后不仅不用写Setter、Getter方法,实现建造者模式也不需要提供一个UserBuilder()内部类。
@Builder 注解实际上就是对建造者模式的一种封装,不需要我们手写代码来实现建造者模式,Lombok 会自动帮助我们实现。
使用 @Builder 注解生成的 Builder 类实际上是一种典型的建造者模式。它包含了一系列用于设置对象属性的方法,最后通过 build() 方法将这些属性组合成一个对象。