using System.Collections.Generic;
private List<Observer> _observers = new List<Observer>();
public void Attach(Observer observer)
_observers.Add(observer);
public void Detach(Observer observer)
_observers.Remove(observer);
foreach (Observer o in _observers)
private string _subjectState;
public string SubjectState
get { return _subjectState; }
set { _subjectState = value; }
public abstract void Update();
class ConcreteObserver : Observer
private string _observerState;
State subject, string name)
public override void Update()
_observerState = _subject.SubjectState;
Console.WriteLine("{0} booked {1}",
set { _subject = value; }
public static void Main()
Console.WriteLine("--------------------");
Console.WriteLine("Cab Booking details");
Console.WriteLine("--------------------");
s.Attach(new ConcreteObserver(s, "Antaun"));
s.Attach(new ConcreteObserver(s, "Aswin"));
s.Attach(new ConcreteObserver(s, "Ivan"));
s.SubjectState = "Premium Cab";
Console.WriteLine("--------------------");