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, ChangedEventArgs e);

//Subject

public class Target: ArrayList

{

public event ChangedEventHandler Changed;

public override int Add(object value)

{

if (Changed != null)

{

Changed(this, new ChangedEventArgs() { PropertName = "Add", Value = value });

}

return base.Add(value);

}
}

//Custom Event args

public class ChangedEventArgs : EventArgs

{

public string PropertName { get; set; }

public object Value { get; set; }

}
public class ObserverOne
{
public ObserverOne(Target target)
{
target.Changed += new ChangedEventHandler(A);
}
public void A(object sender, ChangedEventArgs e)
{

Console.WriteLine("Tagret added with " + e.Value.ToString());

}
}

public class ObserverTwo
{
public ObserverTwo(Target target)
{
target.Changed += new ChangedEventHandler(A);
}

public void A(object sender, ChangedEventArgs e)
{
Console.WriteLine("Tagret added with " + e.Value.ToString());

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

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

target.Add("Chinna");
}