Share via


Design pattern : Observer pattern

Definition

A way of notifying dependent classes of changes.

The Observer pattern defines a one to many relationships between objects so that when one changes its state, all the others are notified accordingly.

Encapsulate the core components in a Subject abstraction, and the variable components in an Observer hierarchy.

Design

The Observer pattern is composed of two classes. The Subject/Target is a class whose objects change their state at an independent rate. Observers may indicate that they wish to be informed of these changes so the Subject/Target will send them notifications.

Code

//Notifier

    public delegate void ChangedEventHandler(object sender);

    //Subject

    public class Temperature

    {

        public event ChangedEventHandler Changed;

private int _temperaturevalue;

       Public TemperatureValue

{

get {return _temperaturevalue;}

set(object value)

{    if( changed!=null) { changed( this) }

         _temperaturevalue=value;

}

}

}    public class ObserverOne
    {
        public ObserverOne(Temperature temperature)
        {
            Temperature.Changed += new ChangedEventHandler(A);
        }
        public void A(object sender, ChangedEventArgs e)
        {
     
     Console.WriteLine("Temperature modified ");

               }
    }

    public class ObserverTwo
    {
        public ObserverTwo(Temperature temperature )
        {
            Temperature .Changed += new ChangedEventHandler(A);
        }

        public void A(object sender, ChangedEventArgs e)
        {
              Console.WriteLine("Temperature modified ");

        }
    }
//Client
static void Main(string[] args)
        {
            Temperature temperature = new Temperature ();

            ObserverOne observer1 = new ObserverOne(temperature );
            ObserverTwo observer2 = new ObserverTwo(temperature );

            Temperature .TemperatureValue=100;

        }

 

Result : As soon as the TemperatureValue property is changed it will notify the changes to the both observerone and observertwo .