 |
| Behavioral Pattern - Observer Pattern |
public interface IObserver
{
void update(float temp, float humidity, float pressure);
}
public interface IDisplayElement
{
void display();
}
public interface ISubject
{
void registerObserver(IObserver o);
void removeObserver(IObserver o);
void notifyObservers();
}
public class WeatherData : ISubject //---------------Subject weather o data
{
private ArrayList observers;
private float temperature;
private float pressure;
private float humidity;
public WeatherData()
{
observers = new ArrayList();
}
public void registerObserver(IObserver o)
{
observers.Add(o);
}
public void removeObserver(IObserver o)
{
int i = observers.IndexOf(o);
if (i >= 0)
observers.Remove(i);
}
public void notifyObservers()
{
for (int i = 0; i < observers.Count; i++)
{
IObserver observer = (IObserver)observers[i];
observer.update(temperature, humidity, pressure);
}
}
public void measurementsChanged()
{
notifyObservers();
}
public void setMeasurements(float temperature, float humidity, float pressure)
{
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
measurementsChanged();
}
}
public class CurrentConditionDisplay : IObserver, IDisplayElement //---------------Observer
{
private float temp;
private float humidity;
private float pressure;
private ISubject subject;
public CurrentConditionDisplay(ISubject weatherData)
{
this.subject = weatherData;
subject.registerObserver(this);
}
public void update(float temp, float humidity, float pressure)
{
this.temp = temp;
this.humidity = humidity;
this.pressure = pressure;
display();
}
public void display()
{
Console.Write("\n (" + this.ToString() + " Observer) Current Conditions: " + temp + " F degrees and " + humidity + "% humidity");
}
}
public class StatisticsDisplay : IObserver, IDisplayElement //---------------Observer
{
private float temp;
private float humidity;
private float pressure;
private ISubject subject;
public StatisticsDisplay(ISubject weatherData)
{
this.subject = weatherData;
this.subject.registerObserver(this);
}
public void update(float temp, float humidity, float pressure)
{
this.temp = temp;
this.humidity = humidity;
this.pressure = pressure;
display();
}
public void display()
{
Console.Write("\n (" + this.ToString() + " Observer) Statistics : " + temp + " F degrees and " + humidity + "% humidity ");
}
}
public class ForecastDisplay : IObserver, IDisplayElement //---------------Observer
{
private float temp;
private float humidity;
private float pressure;
private ISubject subject;
public ForecastDisplay(ISubject weatherData)
{
this.subject = weatherData;
this.subject.registerObserver(this);
}
public void update(float temp, float humidity, float pressure)
{
this.temp = temp;
this.humidity = humidity;
this.pressure = pressure;
display();
}
public void display()
{
Console.Write("\n (" + this.ToString() + " Observer) Forecast : " + temp + " F degrees and " + humidity + "% humidity \n");
}
}
//*************CLIENT Calling*********************************************
//************Observer Pattern*********************************************
WeatherData weatherdata = new WeatherData();
CurrentConditionDisplay currentDisplay = new CurrentConditionDisplay(weatherdata);
StatisticsDisplay statisticsDisplay = new StatisticsDisplay(weatherdata);
ForecastDisplay forecastDisplay = new ForecastDisplay(weatherdata);
weatherdata.setMeasurements(80, 65, 30.4f);
weatherdata.setMeasurements(83, 61, 22.4f);
weatherdata.setMeasurements(20, 35, 31.4f);
Console.ReadKey();
//*************************************************************************
No comments:
Post a Comment