using System.Collections.Generic;
public class WeatherStation
public static void Main(String[] args)
WeatherData weatherData = new WeatherData();
CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData);
weatherData.SetMeasurements(80, 65, 30.4f);
weatherData.SetMeasurements(82, 70, 29.2f);
weatherData.SetMeasurements(78, 90, 29.2f);
public interface ISubject
public void RegisterObserver(IObserver o);
public void RemoveObserver(IObserver o);
public void NotifyObservers();
public interface IObserver
public void Update(double temp, double humidity, double pressure);
public interface IDisplayElement
public class WeatherData : ISubject
private List<IObserver> observers;
private double temperature;
observers = new List<IObserver>();
public void RegisterObserver(IObserver o)
public void RemoveObserver(IObserver o)
int i = observers.IndexOf(o);
public void NotifyObservers()
foreach(IObserver observer in observers)
observer.Update(temperature, humidity, pressure);
public void MeasurementsChanged()
public void SetMeasurements(double temperature, double humidity, double pressure)
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
public class CurrentConditionsDisplay : IObserver, IDisplayElement
private double temperature;
private ISubject weatherData;
public CurrentConditionsDisplay(ISubject weatherData)
this.weatherData = weatherData;
weatherData.RegisterObserver(this);
public void Update(double temperature, double humidity, double pressure)
this.temperature = temperature;
this.humidity = humidity;
Console.WriteLine("Current Conditions: {0}F degrees and {1}% humidity", temperature, humidity);