首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在访问者模式中,双重调度是如何工作的?

在访问者模式中,双重调度是如何工作的?
EN

Stack Overflow用户
提问于 2011-07-20 20:54:12
回答 4查看 12K关注 0票数 19

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

请参阅链接Visitor Pattern

双重分派在访问者模式中是如何工作的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-20 21:20:30

element对象的accept方法接收访问者对象,并调用访问者对象上的visit方法。由于访问者对象有几个visit方法,因此会根据元素类型调用适当的visit方法。在这里,我们有两个调用(、double、)来指定元素和元素的正确操作(基于元素的类型)。

票数 21
EN

Stack Overflow用户

发布于 2012-10-03 14:18:08

Single-dispatch

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

如果在节点实例上调用GenerateCode()方法,实际执行的操作取决于节点的类型。它可以是VariableRefNodeAssignmentNode中的方法。如果你调用PrettyPrint(),也是一样的。因此,实际执行的操作取决于要调用的方法的名称和节点的类型。

Double-dispatch

这一次,Node允许您将NodeVisitor类型的参数传递给其名为Accept的方法。在程序中,如果在节点实例上调用Accept,现在执行的实际操作取决于节点的类型(VariableRefNodeAssignmentNode) 和传递给Accept的访问者实例的类型(TypeCheckingVisitorCodeGeneratingVisitor)。

票数 53
EN

Stack Overflow用户

发布于 2011-07-20 21:17:21

好吧,下面是那篇文章中的相关引述:

访问者实现了“双重调度”。OO消息通常表现为“单次分派”--执行的操作取决于:请求的名称和接收者的类型。在“双重调度”中,执行的操作取决于:请求的名称,以及两个接收器的类型(访问者的类型和它访问的元素的类型)。

这本质上意味着不同的访问者可以访问相同的类型,不同的类型可以由同一访问者访问。使用访问者模式执行的命名操作的效果可能取决于访问者和(双重调度)。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6762256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档