Add code examples, and documentation
This commit is contained in:
94
patterns/observer/ObserverPattern/Program.cs
Normal file
94
patterns/observer/ObserverPattern/Program.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
namespace UpdatedOne;
|
||||
|
||||
public interface IObserver<TSubject>
|
||||
{
|
||||
void Update(TSubject subject);
|
||||
}
|
||||
|
||||
public abstract class Subject<TSubject>
|
||||
{
|
||||
private readonly List<IObserver<TSubject>> _observers = new();
|
||||
|
||||
public void Subscribe(IObserver<TSubject> observer)
|
||||
{
|
||||
if (!_observers.Contains(observer))
|
||||
_observers.Add(observer);
|
||||
}
|
||||
|
||||
public void Unsubscribe(IObserver<TSubject> observer)
|
||||
{
|
||||
_observers.Remove(observer);
|
||||
}
|
||||
|
||||
protected void Notify(TSubject subject)
|
||||
{
|
||||
foreach (IObserver<TSubject> observer in _observers.ToArray())
|
||||
observer.Update(subject);
|
||||
}
|
||||
}
|
||||
|
||||
public class Data : Subject<Data>
|
||||
{
|
||||
private int _value;
|
||||
|
||||
public Data(int value)
|
||||
{
|
||||
_value = value;
|
||||
}
|
||||
|
||||
public void SetData(int value)
|
||||
{
|
||||
if (_value == value)
|
||||
return;
|
||||
|
||||
_value = value;
|
||||
|
||||
Console.WriteLine($"Data changed to {_value}");
|
||||
|
||||
Notify(this);
|
||||
}
|
||||
|
||||
public int GetData()
|
||||
{
|
||||
return _value;
|
||||
}
|
||||
}
|
||||
|
||||
public class BarGraph : IObserver<Data>
|
||||
{
|
||||
public void Update(Data subject)
|
||||
{
|
||||
int value = subject.GetData();
|
||||
|
||||
Console.WriteLine($"Bar Graph updated: {value}");
|
||||
}
|
||||
}
|
||||
|
||||
public class PieChart : IObserver<Data>
|
||||
{
|
||||
public void Update(Data subject)
|
||||
{
|
||||
int value = subject.GetData();
|
||||
|
||||
Console.WriteLine($"Pie Chart updated: {value}");
|
||||
}
|
||||
}
|
||||
|
||||
internal static class Program
|
||||
{
|
||||
private static void Main()
|
||||
{
|
||||
Data data = new Data(2);
|
||||
|
||||
BarGraph barGraph = new BarGraph();
|
||||
PieChart pieChart = new PieChart();
|
||||
|
||||
data.Subscribe(barGraph);
|
||||
data.Subscribe(pieChart);
|
||||
|
||||
data.SetData(3);
|
||||
|
||||
data.Unsubscribe(barGraph);
|
||||
data.Unsubscribe(pieChart);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user