package com.woniu.builderdemo; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import java.util.function.Supplier; /** * 通用的 Builder 模式构建器 * */ public class Builder { private final Supplier instantiator; private List> modifiers = new ArrayList<>(); public Builder(Supplier instantiator) { this.instantiator = instantiator; } public static Builder of(Supplier instantiator) { return new Builder<>(instantiator); } public Builder with(Consumer1 consumer, P1 p1) { Consumer c = instance -> consumer.accept(instance, p1); modifiers.add(c); return this; } public Builder with(Consumer2 consumer, P1 p1, P2 p2) { Consumer c = instance -> consumer.accept(instance, p1, p2); modifiers.add(c); return this; } public Builder with(Consumer3 consumer, P1 p1, P2 p2, P3 p3) { Consumer c = instance -> consumer.accept(instance, p1, p2, p3); modifiers.add(c); return this; } public T build() { T value = instantiator.get(); modifiers.forEach(modifier -> modifier.accept(value)); modifiers.clear(); return value; } /** * 1 参数 Consumer */ @FunctionalInterface public interface Consumer1 { void accept(T t, P1 p1); } /** * 2 参数 Consumer */ @FunctionalInterface public interface Consumer2 { void accept(T t, P1 p1, P2 p2); } /** * 3 参数 Consumer */ @FunctionalInterface public interface Consumer3 { void accept(T t, P1 p1, P2 p2, P3 p3); } }