Observer.cs
using System;
using System.Text;
using System.Collections.Generic;
namespace Observer
{
public interface ISubject
{
void RegisterObserver(IOvserver o);
void RemoveObserver(IOvserver o);
void NotifyObserver();
}
public interface IOvserver
{
void update(float temp, float humidity, float pressure);
}
public interface IDisplayElement
{
void display();
}
public class WeatherData:ISubject
{
private List<IOvserver> obList;
private float temperature;
private float humidity;
private float pressure;
public WeatherData()
{
obList = new List<IOvserver>();
}
public void RegisterObserver(IOvserver o)
{
obList.Add(o);
}
public void RemoveObserver(IOvserver o)
{
if (obList.IndexOf(o) >= 0)
{
obList.Remove(o);
}
}
public void NotifyObserver()
{
foreach (IOvserver ob in obList)
{
ob.update(temperature, humidity, pressure);
}
}
public void measureChanged()
{
NotifyObserver();
}
public void setMesureData(float temperature, float humidity, float pressure)
{
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measureChanged();
}
}
public class CurrentConditionDisplay : IOvserver, IDisplayElement
{
float temperature, humidity, pressure;
ISubject weatherData;
public CurrentConditionDisplay(ISubject weatherData)
{
this.weatherData = weatherData;
weatherData.RegisterObserver(this);
}
public void update(float temperature, float humidity, float pressure)
{
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
display();
}
public void display()
{
float pp = computeHeatIndex(temperature, humidity);
Console.WriteLine(@"Current Condition:" + temperature + "F degrees and" + humidity + "%humidity"
+ " RH: " + pp);
}
private float computeHeatIndex(float t, float rh)
{
float index = (float)((16.923 + (0.185212 * t) + (5.37941 * rh) - (0.100254 * t * rh) +
(0.00941695 * (t * t)) + (0.00728898 * (rh * rh)) +
(0.000345372 * (t * t * rh)) - (0.000814971 * (t * rh * rh)) +
(0.0000102102 * (t * t * rh * rh)) - (0.000038646 * (t * t * t)) + (0.0000291583 *
(rh * rh * rh)) + (0.00000142721 * (t * t * t * rh)) +
(0.000000197483 * (t * rh * rh * rh)) - (0.0000000218429 * (t * t * t * rh * rh)) +
0.000000000843296 * (t * t * rh * rh * rh)) -
(0.0000000000481975 * (t * t * t * rh * rh * rh)));
return index;
}
}
}