Projektdateien hinzufügen.
This commit is contained in:
12
WindowsFormsApp1/OP/ClassObserver.cs
Normal file
12
WindowsFormsApp1/OP/ClassObserver.cs
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
16
WindowsFormsApp1/OP/IObserver.cs
Normal file
16
WindowsFormsApp1/OP/IObserver.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
23
WindowsFormsApp1/OP/ISubject.cs
Normal file
23
WindowsFormsApp1/OP/ISubject.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
20
WindowsFormsApp1/OP/PropertyObserver.cs
Normal file
20
WindowsFormsApp1/OP/PropertyObserver.cs
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
43
WindowsFormsApp1/OP/Subject.cs
Normal file
43
WindowsFormsApp1/OP/Subject.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user