访问者设计模式和深度优先搜索之间的区别?

joh*_*ohn 2 oop tree search design-patterns visitor-pattern

深度优先搜索似乎能够执行与访客设计模式相似的功能。访问者允许您定义一些数据结构并根据需要在这些结构上添加操作(以多个访问者的形式),而无需修改结构本身。维基百科上提供了访客模式的描述。如果我们在数据结构上进行深度优先搜索(或其他任何图形搜索算法,例如广度优先搜索),并且每次找到该结构的元素,我们都会运行所需的操作,那么这似乎执行与访客。例如,考虑一棵树。即使树的某些节点具有不同的类型,我们在执行DFS时仍然可以检查节点类型,然后根据节点类型执行不同的操作。

NRi*_*itH 5

深度优先搜索就是这种搜索。一个访问者模式是垂直深度优先搜索,在这个意义上,访问者不必关心如何树遍历; 它只知道在每个节点上/对每个节点需要做什么。


hvg*_*des 4

您可以在没有 DFS 的情况下实现访客。同样,您可以在不使用访问者模式的情况下执行 DFS。它们是完全分开的。

我碰巧同意它们可以以一种优雅的方式一起使用的含义。

请注意,对于规范的访问者模式,被访问的对象需要实现某种AcceptVisitor接口 - 您问题中的“不修改结构本身”的子句让我怀疑您是否正在这样做。