实现观察者模式(Observer),支持优先级和过滤功能
TypeScript
Hard
classes
任务 «实现观察者模式(Observer),支持优先级和过滤功能»
创建一个 `EventBus` 类,实现观察者模式。它应允许订阅事件时指定优先级(整数,数值越小越早被调用)和可选的过滤器(一个函数,接收数据并返回 true 表示应调用处理程序)。发布事件时,处理程序按优先级顺序调用,仅当过滤器(如果指定)返回 true 时才执行。处理程序可通过标识符取消订阅。实现以下方法:`subscribe(event: string, handler: Function, priority: number = 0, filter?: (data: any) => boolean): string`(返回订阅 ID),`unsubscribe(id: string): void`,`publish(event: string, data: any): void`。如果调用处理程序时发生异常,应捕获该异常并输出到控制台,但不得中断其他处理程序的执行。输入数据:一系列命令(subscribe、unsubscribe、publish)。输出:命令执行结果(对于 publish,通过控制台输出)。
输入格式
序列中的命令,每行一条。命令包括:subscribe <event> <priority> [filter],unsubscribe <id>,publish <event> <data>。对于subscribe:event为字符串,priority为整数,filter为可选的过滤代码字符串(例如,'data>5')。对于publish:event为字符串,data为JSON值(数字、字符串、对象)。
输出格式
对于每个publish命令,按调用顺序输出处理器的执行结果:格式为'Handler <id> called with <data>'的字符串,每个占一行。如果没有处理器,则输出'No handlers'。处理器的错误将被忽略,但其错误信息会输出到控制台(在测试中不进行验证)。
示例
示例 1
输入
2
Circle 0.0 0.0 5.0
Rectangle 3.0 2.0 7.0 0.0
输出
示例 2
输入
2
Point 1.0 2.0
Circle 3.0 4.0 1.0
输出
main.ts