访客模式:遍历客户端或访客中的树元素

toe*_*ebs 5 visitor-pattern

早上好,stackoverflow,

我目前正在 AST 之类的东西上实现访问者模式。现在我的问题是,如何迭代元素?

我认为将对象返回给访问者并让访问者从那里开始遍历更符合逻辑。因为当您想以不同的方式遍历对象时,您要保持灵活性。

另一方面,人们可以说,访问者不应该关心对象的结构。因此,如果对象发生变化,您不必也更改访问者。

有什么一般建议可以解决这个问题吗?我有两本关于访问者模式的书,但这两本书都没有讨论如何处理更复杂的节点的问题。

问候脚趾

pab*_*han 2

对于树结构来说,这似乎非常简单。accept节点中的方法可能如下所示:

void accept(Visitor visitor) {
    visitor.visitMyTypeOfNode(this);
    for each child {
        child.accept(visitor);
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,您需要考虑这对于应用程序的整体架构是否有意义。