java配置/参数传递设计

Joh*_*erg 8 java configuration parameter-passing

我经常发现需要设计具有可配置功能的对象.

举例来说,假设我正在创建一个DateIterator.可配置选项可能是迭代闭合间隔[start, end]还是开放端间隔[start, end).


  • (1)在我看来,不合理的解决方案 - 仅限于一个真/假配置选项
new DateIterator(boolean openInterval);
Run Code Online (Sandbox Code Playgroud)
  • (2)类型安全的枚举方式 - 通常有点笨重
new DateIterator(Interval.OPEN_END);
Run Code Online (Sandbox Code Playgroud)
  • (3)非传统的尝试 - 很好但不太直接
new DateIterator().openEnd();
Run Code Online (Sandbox Code Playgroud)
  • (4)继承方法 - 经常过度工程化
new OpenEndedDateIterator();
Run Code Online (Sandbox Code Playgroud)

为此我提出了一些我认为较差的替代方案,如基于整数的配置new DateIterator(Interval.OPEN_END);或基于属性的配置.

还有其他方法吗?您更喜欢哪种方法?

Sea*_*oyd 6

我会说Builder模式在这里有意义:

DateIterator di = 
  DateIterator.builder()
              .withStartDate(new Date())
              .withOpenEnd()
              .build();
Run Code Online (Sandbox Code Playgroud)

这样,您的实际DateIterator可以是不可变的,而返回的构建器DateIterator.builder()可以使配置工作.