Все, что я пытаюсь сделать, это реализовать шаблон наблюдателя.
Итак, я придумал это решение:
У нас есть PoliceHeadQuarters, основной задачей которого является отправка уведомлений всем тем, кто подписался на него. Учтите, что классы DSP, Inspector и SubInspector подписаны на PoliceHeadQuarters.
Используя события и делегаты, я написал
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()));
}
}
и вот как я его вызывал
var headQuarters = new HeadQuarters();
var SubInspector = new SubInspector();
var Inspector = new Inspector();
headQuarters.NewEvent += Inspector.Listen;
headQuarters.NewEvent += SubInspector.Listen;
headQuarters.RaiseANotification();
Таким образом, оба класса Inspector и SubInspector получают уведомление, когда вызывается функция RaiseANotification().
Кажется, что DotNet Framework 4, 4.5 поддерживает новый способ, называемый IObserver и IObservable.
Может ли кто-нибудь дать мне простой пример с использованием шаблона IObservable и IObserver для вышеупомянутого сценария? Я googled только для того, чтобы найти доступные примеры в Интернете слишком раздутыми и трудно понять.
Мой hinch: (возможно, я думаю, что это неправильно)
class DSP : IObserver //since it observes the headquarters ?
class PoliceHeadQuarters: IObservable // since here where we send the notifications ?
Спасибо заранее.
EDIT: кто-то также сказал, что документация MSDN также неверна для IObservable @ IObservable vs Plain Events или почему я должен использовать IObservable?.