当以面向对象的方式实现大海捞针的搜索时,您实际上有三种选择:
1. needle.find(haystack)
2. haystack.find(needle)
3. searcher.find(needle, haystack)
你更喜欢哪个?为什么?
我知道有些人喜欢第二种选择,因为它避免引入第三个对象。但是,至少在您的目标是为“真实世界”建模的过程中,我不禁会觉得第三种方法在概念上更“正确”。
在什么情况下,您认为引入助手对象(例如本示例中的搜索器)是合理的,何时应避免使用它们?
最佳答案
通常情况下,应该将操作应用于您正在执行的操作...在这种情况下,应该选择大海捞针,因此我认为选项2最合适。
您还有第四个替代方案,我认为它比替代方案3更好:
haystack.find(needle, searcher)
在这种情况下,它允许您提供要作为操作一部分进行搜索的方式,因此可以将操作与正在操作的对象一起保留。