Tutto quello che sto cercando di fare è implementare il pattern di osservatore.IObserver e IObservable in C# per Observer vs Delegates, Events
Quindi, mi si avvicinò con questa soluzione:
Abbiamo un PoliceHeadQuarters il cui compito principale è quello di inviare le notifiche a tutti coloro che sono iscritti ad esso. Considera che le classi DSP, Inspector e SubInspector sono sottoscritte a PoliceHeadQuarters.
Uso Eventi e delegati ho scritto
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()));
}
}
e in questo modo ho invocato lo
var headQuarters = new HeadQuarters();
var SubInspector = new SubInspector();
var Inspector = new Inspector();
headQuarters.NewEvent += Inspector.Listen;
headQuarters.NewEvent += SubInspector.Listen;
headQuarters.RaiseANotification();
così, sia l'ispettore e classi SubInspector avere la notifica ogni volta che c'è invocato la RaiseANotification funzione di().
Sembra che DotNet Framework 4, 4.5 supporti un nuovo metodo denominato IObserver e IObservable.
Qualcuno può darmi un esempio semplicissimo usando il pattern IObservable e IObserver per lo scenario sopra? Ho cercato solo su Google per trovare gli esempi disponibili in Internet troppo gonfiati e difficili da capire.
mio Hinch: (probabilmente penso che sia sbagliato)
class DSP : IObserver //since it observes the headquarters ?
class PoliceHeadQuarters: IObservable // since here's where we send the notifications ?
Grazie in anticipo.
MODIFICA: qualcuno ha anche affermato che la documentazione MSDN non è corretta per IObservable @ IObservable vs Plain Events or Why Should I use IObservable?.
http://msdn.microsoft.com/en-us/library/dd990377.aspx - c'è un bell'esempio, perché non provi a compilarlo ed eseguirlo? – Spook
@Spook: il problema è in realtà non posso co-relazionare il mio scenario con quegli esempi. Qualsiasi struttura di codice skeleton dovrebbe aiutarmi ad andare oltre .. –
Sembra che l'esempio di Microsoft stia utilizzando un Aggregatore di eventi di base. Un approccio più complesso ma, in definitiva, più flessibile. L'Aggregator esegue iterazioni sui tipi di IObserver chiamandoli in sequenza.Penso che questo sia il motivo per cui l'approccio basato sull'interfaccia è usato in contrasto con i delegati. –