pub trait Observer {
type Subject: Observable;
// Required method
fn update(
&self,
state: &<Self::Subject as Observable>::State,
) -> Result<(), <Self::Subject as Observable>::Error>;
}Expand description
观察者 trait
定义观察者必须实现的接口。观察者可以订阅被观察者的状态变化,
并在状态更新时通过 update 方法接收通知。
§关联类型
Subject: 观察者订阅的被观察者类型,必须实现Observabletrait
§方法
update: 接收状态更新通知
§实现要求
实现者需要指定具体的被观察者类型,并实现 update 方法。
update 方法应该快速返回,避免阻塞通知过程。
§线程安全
实现者应确保 update 方法是线程安全的,因为可能从多个线程调用。
§示例
use std::sync::Arc;
use rust_patterns_components::{Observer, Observable};
struct TemperatureSensor;
impl Observable for TemperatureSensor {
type State = f64;
type Error = String;
fn attach(&mut self, _observer: Arc<dyn Observer<Subject = Self>>) {}
fn detach(&mut self, _observer: Arc<dyn Observer<Subject = Self>>) {}
}
struct TemperatureDisplay;
impl Observer for TemperatureDisplay {
type Subject = TemperatureSensor;
fn update(&self, state: &f64) -> Result<(), String> {
println!("当前温度: {:.1}°C", state);
Ok(())
}
}Required Associated Types§
Sourcetype Subject: Observable
type Subject: Observable
观察者订阅的被观察者类型
此类型必须实现 Observable trait,定义了观察者关注的状态和错误类型。