• 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();
  • 相关阅读:
    Log4net<转载>
    XSD使用《转载》
    assemble文件中配置
    常用工具《收藏》
    mysql查看所有存储过程,函数,视图,触发器,表《转》
    log4g net 配置
    XSLT使用<转载>
    C#操作xml之xpath语法<收藏>
    如何做镜像服务器
    Android开发之旅:环境搭建及HelloWorld
  • 原文地址:https://www.cnblogs.com/Joynic/p/13220858.html
Copyright © 2020-2023  润新知