pub trait Observable {
type State;
type Error;
// Required methods
fn attach(&mut self, observer: Arc<dyn Observer<Subject = Self>>);
fn detach(&mut self, observer: Arc<dyn Observer<Subject = Self>>);
}Expand description
被观察者 trait
定义被观察者必须实现的接口。被观察者维护一组观察者, 并在状态变化时通知它们。
§关联类型
State: 被观察者的状态类型,观察者通过此类型接收状态更新Error: 观察者处理更新时可能返回的错误类型
§方法
attach: 附加观察者到被观察者detach: 从被观察者分离观察者
§实现要求
实现者需要指定状态类型和错误类型,并实现观察者管理方法。
通常建议使用 ObserverRegistry 来简化实现。
§线程安全
实现者应确保观察者管理方法是线程安全的,因为可能从多个线程调用。
§示例
use std::sync::Arc;
use rust_patterns_components::{Observable, Observer, ObserverRegistry};
struct WeatherStation {
registry: ObserverRegistry<Self>,
}
impl Observable for WeatherStation {
type State = f64;
type Error = String;
fn attach(&mut self, observer: Arc<dyn Observer<Subject = Self>>) {
self.registry.attach(observer);
}
fn detach(&mut self, observer: Arc<dyn Observer<Subject = Self>>) {
self.registry.detach(observer);
}
}Required Associated Types§
Required Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".