ARTICLE

Observer Design Pattern

Posted by Srihari Chinna Articles | Design & Architecture October 25, 2010
This article talks about the observer design pattern.
Reader Level:

Definition

A way of notifying a change to a number of dependent classes.

The Observer pattern defines a one to many relationship 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 and the Subject/Target will send them notifications.

UML Diagram

1.gif

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");
}

Login to add your contents and source code to this article
post comment
     
COMMENT USING
PREMIUM SPONSORS
DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and add new content to existing PDF documents from within your applications.
SPONSORED BY
  • PDF reports have never been easier to create. With our included WYSIWYG Designer, you can layout your reports, set up your data source and let DynamicPDF ReportWriter do the rest.
Get Career Advice from Experts