Observer Design Pattern C# implementation:
//------------------------------------
// Observer design pattern implementation in C#
//------------------------------------
using System;
using System.Collections;
// "Subject"
abstract class Event
{
// Fields
protected string description;
private ArrayList receivers = new ArrayList();
// Constructor
public Event( string d ) {this.description = d; }
// Methods
public void Attach( Receiver receiver ) { receivers.Add( receiver ); }
public void Detach( Receiver receiver ) { receivers.Remove( receiver ); }
public void Notify()
{
foreach( Receiver r in receivers )
r.Notify( this );
}
// Properties
public string Description
{
get{ return description; }
set
{
description = value;
Notify(); }
}
}
//--------------------------------------------
// "ConcreteSubject"
class BirthDay : Event
{
// Constructor
public BirthDay( string descr )
: base( descr )
{}
}
//--------------------------------------------
// "Observer"
interface IReceiver
{
// Methods
void Notify( Event e );
}
//--------------------------------------------
// "ConcreteObserver"
class Receiver : IReceiver
{
// Fields
private string name;
private Event e;
// Constructors
public Receiver( string name ) { this.name = name; }
// Methods
public void Notify( Event e )
{
Console.WriteLine( "Notified receiver {0} about {1} ", name, e.Description );
}
// Properties
public Event Event
{
get{ return e; }
set{ e = value; }
}
}
//--------------------------------------------
public class ObserverTest
{
public static void Main( string[] args )
{
// Create list of receivers
Receiver r1 = new Receiver( "Jerry" );
Receiver r2 = new Receiver( "Tom" );
// Create "Birth Day" event and attach the receivers
BirthDay b1 = new BirthDay( "Bill's birth day." );
b1.Attach( r1 );
b1.Attach( r2 );
// Change "Birth Day" description, which notifies receivers
b1.Description = "Sam's birth day.";
b1.Description = "Mom's birth day.";
Console.Read();
}
}
|