using System.Collections.Generic;
namespace WindowsFormsApp1.OP
{
///
/// Owns some important state and notifies observers when the state changes.
///
public class Subject : ISubject
{
private protected List> _observers = null;
private object state { get;set; }
public Subject()
{
_observers = new List>();
}
public virtual void Subscribe(IObserver observer)
{
_observers.Add(observer);
}
public virtual void Unsubscribe(IObserver observer)
{
_observers.Remove(observer);
}
public void Notify()
{
foreach (IObserver observer in _observers)
{
observer.Update(this);
}
}
public virtual void SetState(T state)
{
this.state = state;
Notify();
}
public virtual T GetState()
{
return (T)state;
}
}
}