Multi-cast Delegate(多播委托)

将多个处理器绑定到同一事件槽的模式。触发时全部处理器按序调用,互不覆盖,区别于单播(后者覆盖前者)。常见于需要在不同层级同时监听同一事件的场景(如框架级监控 + 业务级监控)。

定义

Multi-cast Delegate 将多个事件处理器绑定到同一个事件槽,触发时所有处理器按注册顺序全部调用,没有处理器能覆盖其他处理器。

与 Composite 的区别

Multi-cast Delegate 常被误称为 Composite 模式。区别在于:

  • Composite:强调树形层次,叶节点和组合节点实现同一接口,操作向下代理
  • Multi-cast Delegate:强调扇出广播,多个平级处理器绑定同一槽位,无层次关系

典型案例

vercel/ai SDK 的 tool-loop-agent.ts:L224-L248mergeCallbacks 实现:

typescript
onStepEnd: mergeCallbacks(
  this.settings.onStepEnd,  // settings 层监控(先调用)
  callOptions.onStepEnd,    // call 层监控(后调用)
),

settings 级和 call 级的回调都会触发,互不覆盖——settings 层可以做全局遥测,call 层可以做单次调用的定制处理。

注意事项

  • 执行顺序:通常是注册顺序,settings 层先于 call 层
  • 异常传播:若前一个处理器抛出异常,后续处理器是否执行取决于实现(mergeCallbacks 的具体行为需查看实现)
  • 副作用:所有处理器都会执行到完成,无法短路

引用本术语的文章