为什么我们需要在访问者 DP 中同时使用accept
和函数?visit
如果我们举一个典型的例子:
class Visitor {
visit(A a) { }
visit(B b) { }
}
interface Element {
accept(Visitor v);
}
class A implements Element {
accept(Visitor v) {
v.visit(this); // will call visit(A)
}
}
class B implements Element {
accept(Visitor v) {
v.visit(this); // will call visit(B)
}
}
要使用访问者 DP,我们有一个 的实例和一个 的实例v
,我们这样做:Visitor
e
Element
e.visit(v)
它只是调用
v.visit(e)
那么为什么我们不能简单地进行第二次调用并绕过中介函数呢?由于我认为 GoF 并不愚蠢,我想我错过了一些东西。它是什么?