通常,我发现需要设计具有可配置功能的对象。

为了举例说明,假设我正在创建DateIterator。可配置的选项可以是是迭代封闭时间间隔 [start, end] 还是开放时间间隔 [start, end)

  • (1)在我看来,这是不舒服的解决方案-仅限于一个true/false配置选项
  • new DateIterator(boolean openInterval);
    
  • (2)类型安全的枚举方式-通常有点笨拙
  • new DateIterator(Interval.OPEN_END);
    
  • (3)非常规尝试-不错,但不太直接
  • new DateIterator().openEnd();
    
  • (4)继承方法-过度设计
  • new OpenEndedDateIterator();
    

    为此,我考虑了一些较差的选择,例如基于整数的配置new DateIterator(Interval.OPEN_END);或基于属性的配置。

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

    最佳答案

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

    DateIterator di =
      DateIterator.builder()
                  .withStartDate(new Date())
                  .withOpenEnd()
                  .build();
    

    这样,您的实际DateIterator可能是不可变的,而DateIterator.builder()返回的构建器将完成配置工作。

    关于java配置/参数传递设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7230120/

    10-11 06:59