1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| /** * @author : sungm * @since : 2020-06-15 11:00 */ public class Builder<T> {
private final Supplier<T> supplier; private List<Consumer<T>> consumers = new ArrayList<>();
private Builder(Supplier<T> supplier) { this.supplier = supplier; }
public static <T> Builder<T> of(Supplier<T> supplier) { return new Builder<>(supplier); }
public <U> Builder<T> with(BiConsumer<T, U> biConsumer, U u) { consumers.add(supplier -> biConsumer.accept(supplier, u)); return this; }
public T build() { T value = supplier.get(); consumers.forEach(consumer -> consumer.accept(value)); consumers.clear(); return value; }
}
|