using System.Collections.Generic;
public static void Main()
WheatherData data = new WheatherData();
StatisticScreen sScreen = new StatisticScreen(data);
ForecastScreen fScreen = new ForecastScreen(data);
data.UnregisterObserver(fScreen);
public interface ISubject
void RegisterObserver(IObserver observer);
void UnregisterObserver(IObserver observer);
public interface IObserver
void Update(int newValue);
public class WheatherData : ISubject
List<IObserver> observers = new List<IObserver>();
public void RegisterObserver(IObserver observer)
public void UnregisterObserver(IObserver observer)
if(observers.Contains(observer))
observers.Remove(observer);
public void SetValue(int newValue)
this._valueToPass = newValue;
observers.ForEach(o => o.Update(_valueToPass));
public class StatisticScreen : IObserver
private ISubject _subject;
public StatisticScreen(ISubject subject)
_subject.RegisterObserver(this);
public void Update(int newValue)
Console.WriteLine("Statistic screen updated, new value: " + newValue.ToString());
public class ForecastScreen : IObserver
private ISubject _subject;
public ForecastScreen(ISubject subject)
_subject.RegisterObserver(this);
public void Update(int newValue)
Console.WriteLine("Forecast screen updated, new value: " + newValue.ToString());