Add code examples, and documentation

This commit is contained in:
Aaron Po
2026-08-12 00:03:32 -04:00
commit 77c16e69f6
79 changed files with 4458 additions and 0 deletions

View 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);
}
}