//也可理解为,当WorkMaster状态发生改变时,所有依赖于他的对象都会接收到通知
struct LocalWorker {} impl Worker for LocalWorker { fn on_new_work(&self, work: Work) { println!("local worker receiver new work {:?}", work) } } struct RemoteWorker {} impl Worker for RemoteWorker { fn on_new_work(&self, work: Work) { println!("remote worker receive new work {:?}", work) } }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn observer_mode_test() {
let mut master = WorkMaster{workers: Vec::new()};
let local_worker = LocalWorker{};
let remote_worker = RemoteWorker{};
master.register_worker(Box::new(local_worker));
master.register_worker(Box::new(remote_worker));
// local worker receiver new work Work { id: 1 }
// remote worker receive new work Work { id: 1 }
master.dispatch_new_work(Work{id: 1});
}
}
WorkMaster通过关联函数dispatch_new_work,通知接收者自己状态发生了改变。
DBA学RUST设计模式--观察者模式
标签:div color 方法 int 发送 观察者模式 自己 实例 remote