Wszystko, co próbuję zrobić, to implementacja wzorca obserwatora.IObserver i IObservable w języku C# dla obserwatora kontra uczestnicy, zdarzenia
Więc wymyśliłem tego rozwiązania:
Mamy PoliceHeadQuarters, których głównym zadaniem jest wysyłanie powiadomień do wszystkich tych, którzy są zapisani do niego. Weź pod uwagę, że klasy DSP, Inspector i SubInspector zasubskrybowały usługę PoliceHeadQuarters.
Korzystanie Imprezy i Delegaci pisałem
public class HeadQuarters
{
public delegate void NewDelegate(object sender, EventArgs e);
public event EventHandler NewEvent;
public void RaiseANotification()
{
var handler = this.NewEvent;
if (handler != null)
{
handler(this, new EventArgs());
}
}
}
public class SubInspector
{
public void Listen(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Event Notification received by sender = {0} with eventArguments = {1}", sender, e.ToString()));
}
}
public class Inspector
{
public void Listen(object sender, EventArgs e)
{
MessageBox.Show(string.Format("Event Notification received by sender = {0} with eventArguments = {1}", sender, e.ToString()));
}
}
i to w jaki sposób powołać go
var headQuarters = new HeadQuarters();
var SubInspector = new SubInspector();
var Inspector = new Inspector();
headQuarters.NewEvent += Inspector.Listen;
headQuarters.NewEvent += SubInspector.Listen;
headQuarters.RaiseANotification();
więc, zarówno Inspector i zajęcia SubInspector dostać powiadomienie, gdy tam RaiseANotification function() jest wywoływana.
Wygląda na to, że DotNet Framework 4, 4.5 obsługuje nowy sposób o nazwie IObserver i IObservable.
Czy ktoś może dać mi super prosty przykład używając wzoru IObservable i IObserver dla powyższego scenariusza? Szukałem go tylko po to, aby znaleźć dostępne w internecie przykłady, które są zbyt rozdęte i trudne do zrozumienia.
My Hinch: (prawdopodobnie myślę, że to źle)
class DSP : IObserver //since it observes the headquarters ?
class PoliceHeadQuarters: IObservable // since here's where we send the notifications ?
góry dzięki.
EDYCJA: Ktoś powiedział również, że dokumentacja MSDN jest również niepoprawna dla IObservable @ IObservable vs Plain Events or Why Should I use IObservable?.
http://msdn.microsoft.com/en-us/library/dd990377.aspx - istnieje niezły przykład, dlaczego nie spróbujesz go skompilować i uruchomić? – Spook
@Spook: Problem polega na tym, że nie mogę powiązać mojego scenariusza z tymi przykładami. Jakakolwiek struktura kodu szkieletowego powinna pomóc mi pójść dalej. –
Wygląda na to, że przykład Microsoftu wykorzystuje podstawowy moduł Event Aggregator. Bardziej złożone, ale ostatecznie bardziej elastyczne podejście. Agregator iteruje nad typami IObserver wywołującymi je w sekwencji.Myślę, że właśnie dlatego stosuje się podejście oparte na interfejsie w przeciwieństwie do delegatów. –