package com.gdpu.util;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;
@Slf4j
public class BuilderUtil<T> {
/**
* 创建对象的构造方法
*/
private Supplier<T> createInstance;
/**
* 设值的函数方法集合
*/
private List<Consumer<T>> consumers;
private BuilderUtil() {
}
/**
* 创建builder实例
*
* @param constructor build对象的构造方法
* @param <T> build对象的类型
* @return builder实例
*/
public static <T> BuilderUtil<T> builder(Supplier<T> constructor) {
BuilderUtil<T> instance = new BuilderUtil<>();
instance.createInstance = constructor;
instance.consumers = new ArrayList<>(8);
return instance;
}
/**
* 设置对象属性
*
* @param consumer 对象属性设值方法
* @param p 参数
* @param <P> 参数泛型
* @return 当前builder实例
*/
public <P> BuilderUtil<T> set(BiConsumer<T, P> consumer, P p) {
consumers.add(instance -> consumer.accept(instance, p));
return this;
}
/**
* 生成对象
*
* @return 对象实例
*/
public T build() {
T t = createInstance.get();
for (Consumer<T> consumer : consumers) {
consumer.accept(t);
}
return t;
}
}
使用图:
![](https://i-blog.csdnimg.cn/blog_migrate/7d69ee4d41cd69e44247165cddc8d9ec.png)