Pages

Monday, July 6, 2015

Behavioral Pattern - Observer Pattern

Behavioral Pattern - Observer Pattern
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