Skip to main content

Observable

Trait Observable 

Source
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§

Source

type State

被观察者的状态类型

当状态变化时,会传递此类型的值给观察者。

Source

type Error

观察者处理更新时可能返回的错误类型

如果观察者处理更新失败,可以返回此类型的错误。

Required Methods§

Source

fn attach(&mut self, observer: Arc<dyn Observer<Subject = Self>>)

附加观察者

将观察者附加到被观察者。附加后,观察者将收到状态更新通知。

§参数
  • observer: 要附加的观察者强引用
Source

fn detach(&mut self, observer: Arc<dyn Observer<Subject = Self>>)

分离观察者

从被观察者分离指定的观察者。分离后,该观察者将不再收到状态更新通知。

§参数
  • observer: 要分离的观察者强引用

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.

Implementors§