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", so this trait is not object safe.