主页

索引

模块索引

搜索页面

Visitor-访问者

备注

separates an algorithm from an object structure by moving the hierarchy of methods into one object. Allows for one or more operation to be applied to a set of objects at runtime, decoupling the operations from the object structure. 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。

所谓 Single Dispatch:

指的是执行哪个对象的方法,根据对象的运行时类型来决定;
执行对象的哪个方法,根据方法参数的『编译时』类型来决定。

所谓 Double Dispatch:

指的是执行哪个对象的方法,根据对象的运行时类型来决定;
执行对象的哪个方法,根据方法参数的『运行时』类型来决定。

如何理解 “Dispatch” 这个单词呢:

在面向对象编程语言中,我们可以把方法调用理解为一种消息传递,也就是 “Dispatch”。
一个对象调用另一个对象的方法,就相当于给它发送一条消息。这条消息起码要包含对象名、方法名、方法参数。

如何理解 “Single”“Double” 这两个单词呢:

“Single”“Double” 指的是执行哪个对象的哪个方法,跟几个因素的运行时类型有关。
进一步解释:
  Single Dispatch 之所以称为 “Single”,是因为执行哪个对象的哪个方法,
    只跟 “对象” 的运行时类型有关。
  Double Dispatch 之所以称为 “Double”,是因为执行哪个对象的哪个方法,
    跟 “对象” 和 “方法参数” 两者的运行时类型有关。

主页

索引

模块索引

搜索页面