forked from External/mage
[app-wiring-refactor]: Define external configuration
This commit is contained in:
parent
e3733dfae7
commit
cf3dd2d94c
14 changed files with 1083 additions and 2 deletions
36
Mage.Common/src/main/java/mage/utils/FluentBuilder.java
Normal file
36
Mage.Common/src/main/java/mage/utils/FluentBuilder.java
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
package mage.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public abstract class FluentBuilder<ToBuild, RealBuilder extends FluentBuilder<ToBuild, RealBuilder>> {
|
||||
|
||||
final ArrayList<Consumer<RealBuilder>> buildSequence;
|
||||
private final Supplier<RealBuilder> newReference;
|
||||
|
||||
protected FluentBuilder(Supplier<RealBuilder> newReference) {
|
||||
this.buildSequence = new ArrayList<>();
|
||||
this.newReference = newReference;
|
||||
}
|
||||
|
||||
private RealBuilder copy() {
|
||||
final RealBuilder realBuilder = newReference.get();
|
||||
realBuilder.buildSequence.addAll(buildSequence);
|
||||
return realBuilder;
|
||||
}
|
||||
|
||||
protected abstract ToBuild makeValue();
|
||||
|
||||
public RealBuilder with(Consumer<RealBuilder> consumer) {
|
||||
final RealBuilder nextBuilder = this.copy();
|
||||
nextBuilder.buildSequence.add(consumer);
|
||||
return nextBuilder;
|
||||
}
|
||||
|
||||
public ToBuild build() {
|
||||
final RealBuilder instance = this.copy();
|
||||
instance.buildSequence.forEach(c -> c.accept(instance));
|
||||
return instance.makeValue();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue