根据给定契约审查这段生成的单线程事件总线。
保持订阅者名称唯一,允许回调安全订阅,新变化从下一次发布生效,快照只克隆廉价句柄,并且不产生输出。
Rust
use std::cell::RefCell;
use std::rc::Rc;
#[derive(Clone)]
struct Handler {
name: String,
run: Rc<dyn Fn(&Bus)>,
}
struct Bus { handlers: RefCell<Vec<Handler>> }
impl Bus {
fn subscribe(&self, handler: Handler) -> bool {
self.handlers.borrow_mut().push(handler);
true
}
fn publish(&self) {
let snapshot = self.handlers.borrow().clone();
let _exclusive = self.handlers.borrow_mut();
for handler in snapshot {
(handler.run)(self);
}
println!("published");
}
}
生成代码仅作示例,不代表任何特定模型