W tym modelu masz wydawców, którzy zrobią logikę i opublikują „wydarzenie”.
Wydawcy będą następnie rozsyłać swoje wydarzenie tylko do subskrybentów, którzy zasubskrybowali otrzymywanie tego wydarzenia.
W języku C # każdy obiekt może publikować zestaw zdarzeń, które mogą subskrybować inne aplikacje.
Gdy klasa publikująca zgłosi zdarzenie, wszystkie subskrybowane aplikacje są powiadamiane.
Poniższy rysunek przedstawia ten mechanizm.
Najprostszy możliwy przykład dotyczący zdarzeń i delegatów w C #:
kod jest oczywisty. Dodałem również komentarze, aby wyczyścić kod.
using System;
public class Publisher
{
public delegate void TickHandler(Publisher m, EventArgs e);
public TickHandler Tick;
public EventArgs e = null;
public void Start()
{
while (true)
{
System.Threading.Thread.Sleep(300);
if (Tick != null)
{
Tick(this, e);
}
}
}
}
public class Subscriber1
{
public void Subscribe(Publisher m)
{
m.Tick += HeardIt;
}
private void HeardIt(Publisher m, EventArgs e)
{
System.Console.WriteLine("Heard It by Listener");
}
}
public class Subscriber2
{
public void Subscribe2(Publisher m)
{
m.Tick += HeardIt;
}
private void HeardIt(Publisher m, EventArgs e)
{
System.Console.WriteLine("Heard It by Listener2");
}
}
class Test
{
static void Main()
{
Publisher m = new Publisher();
Subscriber1 l = new Subscriber1();
Subscriber2 l2 = new Subscriber2();
l.Subscribe(m);
l2.Subscribe2(m);
m.Start();
}
}
Wynik:
Heard It by Listener
Heard It by Listener2
Heard It by Listener
Heard It by Listener2
Heard It by Listener. . . (nieskończone czasy)