CSharp · Console
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer = new ConcreteObserver(subject);
subject.Attach(observer);
subject.SomeState = 100;
subject.Notify();
}
}
abstract class Subject
{
List<Observer> observers = new List<Observer>();
public void Attach(Observer observer)
{
observers.Add(observer);
}
public void Detach(Observer observer)
{
observers.Remove(observer);
}
public void Notify()
{
foreach (var observer in this.observers)
{
observer.Update();
}
}
}
class ConcreteSubject : Subject
{
public int SomeState { get; set; }
}
abstract class Observer
{
public abstract void Update();
}
class ConcreteObserver : Observer
{
public int ObserverState { get; set; }
ConcreteSubject MySubject { get; set; }
public ConcreteObserver(ConcreteSubject subject)
{
this.MySubject = subject;
}
public override void Update()
{
this.ObserverState = MySubject.SomeState;
Console.WriteLine("My state has been updated: " + this.ObserverState);
}
}