Multi-cast Delegate(多播委托)
将多个处理器绑定到同一事件槽的模式。触发时全部处理器按序调用,互不覆盖,区别于单播(后者覆盖前者)。常见于需要在不同层级同时监听同一事件的场景(如框架级监控 + 业务级监控)。
定义
Multi-cast Delegate 将多个事件处理器绑定到同一个事件槽,触发时所有处理器按注册顺序全部调用,没有处理器能覆盖其他处理器。
与 Composite 的区别
Multi-cast Delegate 常被误称为 Composite 模式。区别在于:
- Composite:强调树形层次,叶节点和组合节点实现同一接口,操作向下代理
- Multi-cast Delegate:强调扇出广播,多个平级处理器绑定同一槽位,无层次关系
典型案例
vercel/ai SDK 的 tool-loop-agent.ts:L224-L248 中 mergeCallbacks 实现:
typescript
onStepEnd: mergeCallbacks(
this.settings.onStepEnd, // settings 层监控(先调用)
callOptions.onStepEnd, // call 层监控(后调用)
),
settings 级和 call 级的回调都会触发,互不覆盖——settings 层可以做全局遥测,call 层可以做单次调用的定制处理。
注意事项
- 执行顺序:通常是注册顺序,settings 层先于 call 层
- 异常传播:若前一个处理器抛出异常,后续处理器是否执行取决于实现(
mergeCallbacks的具体行为需查看实现) - 副作用:所有处理器都会执行到完成,无法短路
引用本术语的文章