public interface IObserver
public class Observer: IObserver
public string Name { get; private set; }
public Observer(string name)
Console.WriteLine($"{Name} has been updated");
public interface ISubject
void Subscribe(Observer observer);
void Unsubscribe(Observer observer);
public class Subject : ISubject
private List<Observer> observers = new List<Observer>();
public void Subscribe(Observer observer)
public void Unsubscribe(Observer observer)
observers.Remove(observer);
observers.ForEach(x => x.Update());
public void DoSomething()
static void Main(string[] args)
var subject = new Subject();
var observerOne = new Observer("One");
subject.Subscribe(observerOne);
var observerTwo = new Observer("Two");
subject.Subscribe(observerTwo);
subject.Unsubscribe(observerOne);
subject.Unsubscribe(observerTwo);