using System.Collections.Generic;
public interface IObserver
public class SpreadSheet : IObserver
Console.WriteLine("Spreadsheet got notified");
public class Chart: IObserver
Console.WriteLine("Chart got notified");
public interface ISubject
void AddObserver(IObserver observer);
void RemoveObserver(IObserver observer);
public class DataSource : ISubject
List<IObserver> observers = new List<IObserver>();
public void AddObserver(IObserver observer)
public void NotifyObservers()
foreach (IObserver observer in observers)
public void RemoveObserver(IObserver observer)
observers.Remove(observer);
public static void Main()
var spreadSheet = new SpreadSheet();
Chart chart = new Chart();
DataSource dataSource = new DataSource();
dataSource.AddObserver(spreadSheet);
dataSource.AddObserver(chart);