Projektdateien hinzufügen.

This commit is contained in:
Kevin Krüger
2022-07-08 15:24:48 +02:00
parent be47a7e74c
commit d25b2cda8e
21 changed files with 874 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
using System.Windows.Forms;
namespace WindowsFormsApp1.OP
{
public class ClassObserver: IObserver<int>
{
public void Update(ISubject<int> subject)
{
MessageBox.Show(subject.GetState().ToString());
}
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WindowsFormsApp1.OP
{
public interface IObserver<T>
{
/// <summary>
/// Receive update from subject
/// </summary>
void Update(ISubject<T> subject);
}
}

View File

@@ -0,0 +1,23 @@
namespace WindowsFormsApp1.OP
{
public interface ISubject<T>
{
/// <summary>
/// Attach an observer to the object.
/// </summary>
/// <param name="observer">Your Observer.</param>
void Subscribe(IObserver<T> observer);
/// <summary>
/// Detach an observer from an object.
/// </summary>
/// <param name="observer">Your observer.</param>
void Unsubscribe(IObserver<T> observer);
/// <summary>
/// Notify all observers about an event.
/// </summary>
void Notify();
void SetState(T state);
T GetState();
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1.OP
{
public class PropertyObserver : IObserver<string>
{
public PropertyObserver()
{ }
public void Update(ISubject<string> subject)
{
MessageBox.Show(subject.GetState());
}
}
}

View File

@@ -0,0 +1,43 @@
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;
}
}
}