双重调度在访客模式中是如何工作的?

我正在研究与访客模式相关的其他问题,但无法理解访客模式中双重调度的实现。

请参考链接 访客模式

双重调度在访客模式中如何工作?


答案 1

单次派单

Single dispatch

假设 Node 是一个接口类,两个子类是接口的具体实现。

如果在节点实例上调用方法,则实际执行的操作取决于节点的类型。它可以是 或 中的方法。如果您调用 .,情况也是如此。因此,执行的实际操作取决于您调用的方法的名称节点的类型GenerateCode()VariableRefNodeAssignmentNodePrettyPrint()

双重调度

NodesVisitors

这次 允许您将类型参数传递给名为 .在程序中,如果调用节点实例,则现在执行的实际操作取决于节点的类型( 或 )以及传入的访问者实例的类型( 或 )。NodeNodeVisitorAcceptAcceptVariableRefNodeAssignmentNodeAcceptTypeCheckingVisitorCodeGeneratingVisitor


答案 2

元素对象的方法接收访问者对象,并在访问者对象上调用该方法。由于访问者对象具有多个方法,因此根据元素类型调用相应的方法。在这里,我们有两个调用(双重调度),它们指定元素和元素的正确操作(基于其类型)。acceptvisitvisitvisit


推荐