Sto creando un'applicazione C # usando il modello di progettazione Soggetto osservatore in un modo leggermente diverso.
Sto passando la classe Provider, implementando IObservable (questo ha il metodo OnNext () che notifica tutte le classi che lo sottoscrivono), al costruttore Observer Class, implementando IObserver (questo agisce sul metodo OnNext () inviato dal classe fornitore).
In questo modo ogni singola classe Observer ha la capacità di eseguire il metodo OnNext () anche notificando altre classi di modifiche.
Quindi un aspetto molto semplicistico del mio progetto di esempio è simile a:
ProviderClass provider;
ObserverClass observer1;
ObserverClass observer2;
.......... observer3;
.......... observer'n';
main()
{
provider = new ProviderClass();
observer1 = new ObserverClass(provider);
observer2 = new ObserverClass(provider);
observer3 = new ObserverClass(provider);
provider.subscribe(observer1);
provider.subscribe(observer2);
provider.subscribe(observer3);
............
............
// arbitrary code happens here
............
............
// later in code observer1,2,3 can each post OnNext() methods
// that each other observer class will also catch since they all have
//, so with some
// filtering of objects being passed in each OnNext() method
// I think this is a great way of passing data from one class to
// another.
}
class ObserverClass : IObserver<Object>
{
ProviderClass copyInstance;
// Now the observer class can notify other classes using OnNext()
public ObserverClass(Provider copy)
{
copyInstance = copy;
}
public virtual Override OnNext(....)
{
// perform specific action
}
public void notifyClasses(...)
{
copyInstance.OnNext(...);
}
}
Esistono alcuni svantaggi nella modifica del modello di progettazione di Subject Observer in questo modo?