lombok 可能大家都用过,有一个 @Builder
注解可以很方便的在对象初始化的时候填充属性值,不用大量的调用 setter
方法,代码更易于阅读与编写。不知道大家有没有想过 @Builder
注解内部是怎么实现的,前些天看 《Effective Java》 的时候刚好看到有一个例子,其实很简单,这里以一个例子分享下代码实现。
定义 Builder
接口,用于 build 对象:
public interface Builder<T> {
T build();
}
定义 bean:
public class UserFacts {
private String name;
private Integer age;
public static UserFactsBuilder builder() {
return new UserFactsBuilder();
}
public static class UserFactsBuilder implements Builder<UserFacts> {
private String name;
private Integer age = 0;
public UserFactsBuilder name(String name) {
this.name = name;
return this;
}
public UserFactsBuilder age(Integer age) {
this.age = age;
return this;
}
@Override
public UserFacts build() {
return new UserFacts(this);
}
}
private UserFacts(UserFactsBuilder builder) {
this.name = builder.name;
this.age = builder.age;
}
}
定义测试类:
public static void main(String[] args) {
UserFacts userFacts = UserFacts.builder()
.name("zchen")
.age(18)
.build();
System.out.println(userFacts.name);
}
这种 build 模式的代码显得很简洁,你需要哪个参数直接 build 即可,比构造器要方便的多。这里只是简单地分享一下,业务代码写久了,没事了解些其他比较好的代码格式或者业务架构模型还是挺有意思的的。