package com.study.newobject.now;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;
/***
* @ClassName: Builder
* @Description:
* @Auther: pengbaowei
* @Date: 2020/1/20
* @version : V1.0
*/
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);
}
}