woieha320r的博客

建造者

用于将复杂对象的构建过程分步,比如MybatisPlus中对sql语句的构建。

· 外界使用时类似setter,一般对外屏蔽构造方法,并且与链式调用结合较广泛。简单场景可使用lombok的@Builder,它会为class生成一个静态的Builder类, 内含相同的全部成员和一个全参构造,new的时机被延迟到build()。

import lombok.Singular;
import lombok.ToString;

import java.util.List;

@lombok.Builder
@ToString
public class Builder {
    private final String strMember;
    private final Object othersComplexMember1;
    private final Object othersComplexMember2;
    @Singular("collectionMember")
    private final List<Object> collectionMember;

    public static void main(String[] args) {
        System.out.println(
                Builder.builder()
                        .strMember("test")
                        .othersComplexMember1(new Object())
                        .othersComplexMember2(new Object())
                        .collectionMember(new Object())
                        .collectionMember(new Object())
                        .build()
        );
    }
}