using System; using System.Collections.Generic; namespace ObserverPattern { class WeatherSupplier : IObservable { private readonly List> _observers; private List Screens { get; } private List GetScreens() { return Screens; } public WeatherSupplier() { _observers = new List>(); Screens = new List(); } public IDisposable Subscribe(IObserver observer) { if (!_observers.Contains(observer)) { _observers.Add(observer); foreach (var item in GetScreens()) { observer.OnNext(item); } } return new Unsubscriber(_observers, observer); } public void WeatherConditions(double temp = 0, double humd = 0, double pres = 0) { var conditions = new Weather(humd, pres, temp); foreach (var item in _observers) item.OnNext(conditions); } } }