我经常发现需要使用可配置功能来设计对象。
举例说明,假设我正在创建DateIterator
。可配置选项可能是迭代关闭区间 [start, end]
还是开放区间 [start, end)
。
new DateIterator(boolean openInterval);
new DateIterator(Interval.OPEN_END);
new DateIterator().openEnd();
new OpenEndedDateIterator();
对于这个,有一些我认为较差的选择,如基于整数的配置new DateIterator(Interval.OPEN_END);
或基于属性的配置。
还有其他方法吗?您更喜欢哪种方法?
答案 0 :(得分:6)
我认为Builder模式在这里有意义:
DateIterator di =
DateIterator.builder()
.withStartDate(new Date())
.withOpenEnd()
.build();
这样你的实际DateIterator可以是不可变的,而DateIterator.builder()
返回的构建器可以完成配置。
答案 1 :(得分:1)
虽然没有好的答案,而且主要是品味问题,但我确实遵循以下经验法则,为避免过度工程设置了大量的例外空间:
同样,这些是我使用的经验法则,绝不是强制性的,而且我经常发现自己不会逐字尊重它们。