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