using System.Collections;
using System.Collections.Generic;
public static void Main()
Subject subject = new Subject();
Observer observer = new Observer(subject,"Center","\t\t");
Observer observer2 = new Observer(subject,"Right","\t\t\t\t");
class Simulator : IEnumerable
string [] moves = {"5","3","1","6","7"};
public IEnumerator GetEnumerator()
foreach (string element in moves)
void AddObserver(IObserver observer);
void RemoveObserver(IObserver observer);
void NotifyObservers(string s);
public string SubjectState { get; set; }
public List<IObserver> Observers { get; private set; }
private Simulator simulator;
private const int speed = 200;
Observers = new List<IObserver>();
simulator = new Simulator();
public void AddObserver(IObserver observer)
public void RemoveObserver(IObserver observer)
Observers.Remove(observer);
public void NotifyObservers(string s)
foreach (var observer in Observers)
new Thread(new ThreadStart(Run)).Start( );
foreach (string s in simulator)
Console.WriteLine("Subject: " + s);
void Update(string state);
class Observer : IObserver
public Observer(ISubject subject, string name, string gap)
subject.AddObserver(this);
public void Update(string subjectState)
Console.WriteLine(gap + name + ": " + state);