• Java 8 consumer风格Builder


     1 public static class GenericBuilder<T> {
     2         private final Supplier<T> instantiate;
     3 
     4         private final List<Consumer<T>> consumers = new ArrayList<>();
     5 
     6         public GenericBuilder(Supplier<T> instantiate) {
     7             this.instantiate = instantiate;
     8         }
     9 
    10         public static <T> GenericBuilder<T> of(Supplier<T> instantiator)  {
    11             return new GenericBuilder<>(instantiator);
    12         }
    13 
    14         public <U> GenericBuilder<T> with(BiConsumer<T, U> biConsumer, U value) {
    15             Consumer<T> setOperationFunction = instance -> biConsumer.accept(instance, value);
    16             consumers.add(setOperationFunction);
    17             return this;
    18         }
    19 
    20         public T build() {
    21             T instance = instantiate.get();
    22 
    23             // loop call each set function with object instance!
    24             consumers.forEach(consumer -> consumer.accept(instance));
    25             consumers.clear();
    26 
    27             return instance;
    28         }
    29     }

    使用:

     1 public class Dummy {
     2         private String name;
     3         private Integer age;
     4         private Boolean foreigner;
     5 
     6         public String getName() {
     7             return name;
     8         }
     9 
    10         public void setName(String name) {
    11             this.name = name;
    12         }
    13 
    14         public Integer getAge() {
    15             return age;
    16         }
    17 
    18         public void setAge(Integer age) {
    19             this.age = age;
    20         }
    21 
    22         public Boolean getForeigner() {
    23             return foreigner;
    24         }
    25 
    26         public void setForeigner(Boolean foreigner) {
    27             this.foreigner = foreigner;
    28         }
    29 
    30 
    31     }
    Dummy build = GenericBuilder.of(Dummy::new).with(Dummy::setAge, 12)
                    .with(Dummy::setName, "Vodoo")
                    .with(Dummy::setForeigner, false).build();
  • 相关阅读:
    [HNOI2008]玩具装箱TOY
    [洛谷P3628] [APIO2010]特别行动队
    [洛谷P2698] [USACO12MAR]花盆Flowerpot
    [SCOI2010]股票交易
    [洛谷P3957] 跳房子
    [洛谷P1822] 魔法指纹
    [NOI2003] 文本编辑器
    平衡树小结
    C++异常处理
    常用颜色的RGB值
  • 原文地址:https://www.cnblogs.com/Joynic/p/13220858.html
Copyright © 2020-2023  润新知