我正在研究与访问者模式相关的其他问题,但无法理解访问者模式中的双重分派的实现。
请参阅链接Visitor Pattern
双重分派在访问者模式中是如何工作的?
发布于 2011-07-20 21:20:30
element对象的accept方法接收访问者对象,并调用访问者对象上的visit方法。由于访问者对象有几个visit方法,因此会根据元素类型调用适当的visit方法。在这里,我们有两个调用(、double、)来指定元素和元素的正确操作(基于元素的类型)。
发布于 2012-10-03 14:18:08
Single-dispatch

假设Node是一个接口类,两个子类是接口的具体实现。
如果在节点实例上调用GenerateCode()方法,实际执行的操作取决于节点的类型。它可以是VariableRefNode或AssignmentNode中的方法。如果你调用PrettyPrint(),也是一样的。因此,实际执行的操作取决于要调用的方法的名称和节点的类型。
Double-dispatch


这一次,Node允许您将NodeVisitor类型的参数传递给其名为Accept的方法。在程序中,如果在节点实例上调用Accept,现在执行的实际操作取决于节点的类型(VariableRefNode或AssignmentNode) 和传递给Accept的访问者实例的类型(TypeCheckingVisitor或CodeGeneratingVisitor)。
发布于 2011-07-20 21:17:21
好吧,下面是那篇文章中的相关引述:
访问者实现了“双重调度”。OO消息通常表现为“单次分派”--执行的操作取决于:请求的名称和接收者的类型。在“双重调度”中,执行的操作取决于:请求的名称,以及两个接收器的类型(访问者的类型和它访问的元素的类型)。
这本质上意味着不同的访问者可以访问相同的类型,不同的类型可以由同一访问者访问。使用访问者模式执行的命名操作的效果可能取决于访问者和(双重调度)。
https://stackoverflow.com/questions/6762256
复制相似问题