当以面向对象的方式实现大海捞针的搜索时,您实际上有三种选择:

1. needle.find(haystack)

2. haystack.find(needle)

3. searcher.find(needle, haystack)

你更喜欢哪个?为什么?

我知道有些人喜欢第二种选择,因为它避免引入第三个对象。但是,至少在您的目标是为“真实世界”建模的过程中,我不禁会觉得第三种方法在概念上更“正确”。

在什么情况下,您认为引入助手对象(例如本示例中的搜索器)是合理的,何时应避免使用它们?

最佳答案

通常情况下,应该将操作应用于您正在执行的操作...在这种情况下,应该选择大海捞针,因此我认为选项2最合适。

您还有第四个替代方案,我认为它比替代方案3更好:

haystack.find(needle, searcher)

在这种情况下,它允许您提供要作为操作一部分进行搜索的方式,因此可以将操作与正在操作的对象一起保留。

10-07 18:15