5

请看标题中的问题!你会“注入”还是“新”一个比较器?如果在规范中设置了元素的顺序并且可能不会改变,你会新它吗?

4

4 回答 4

3

问题“我应该注入这种依赖吗?” 真的是“引用对象应该知道这种依赖的性质吗?”。呃,只能否定。

如果您的班级是 a FastestPonyFinder,并且需要List<Pony>按速度对 a 进行排序,那么我会说它应该了解比较器。比较器需要按速度进行比较,排序最快到列表头部;没有其他比较器适合这项工作。对象应该创建比较器,就像它创建List.

如果您的班级是 a BestPonyFinder,那么它可能应该注入比较器,因为构成“最佳”的定义与如何找到符合它的小马的定义是分开的。这将使您的代码更易于测试,并且将来更易于更改。

于 2012-05-19T19:27:53.100 回答
1

比较器的特点是它们很便宜。 他们通常没有任何领域,如果有,他们也没有很多。

它们是如此便宜,以至于它并不重要。您可以内联构造它们,或者从静态最终字段中获取它们,或者进行单例注入——谁在乎呢?

于 2012-05-19T18:48:43.743 回答
0

此外,如果没有状态,则可以随时“重用”。在这种情况下,它们是线程安全的,不会进入先前使用的状态。所以它最终真的取决于你如何实现比较器:有状态还是没有状态。

于 2012-05-19T18:58:22.113 回答
0

为了更好地进行单元测试,最好拥有 Comparator 的新实例,但是如果您的比较器仅实现 compare 方法并不重要。如果你想将一些数据作为状态注入到比较器并且它可以改变使用之前和之后的测试方法,以确保你不使用以前的上下文。

于 2012-05-19T19:00:31.893 回答