Ho avuto un'idea (che sono sicuro che esiste già), per creare una sorta di "rete di osservatori / soggetti". Mi piacerebbe descrivere come funziona e poi fare diverse domande a riguardo.
Diciamo che abbiamo 5 oggetti: Oggetti A , B , C , D e E . Gli oggetti D e E devono osservare gli oggetti A , B e C .
Con il normale pattern Observer, sia D che E si registrano come osservatori per A , B e C . Ciò significa che D e E dovrebbero registrarsi tre volte in qualità di osservatori, creando un totale di sei relazioni soggetto-osservatore.
L'ideaèdiaggiungereunaltrooggettonelmezzo,chiamiamoloOggettoO.ImplementaentrambeleinterfacceObservereObservable.SiregistracomeosservatoredioggettiA,BeC.GlioggettiDeEsiregistranocomeosservatoriperl'oggettoO.
OgnivoltacheglioggettiA,BeCnotificanooggettoO,oggettoOnotificaaipropriosservatori-DeE.Cosìcreandounasortadirete.Questaretehauntotaledicinquerelazionisoggetto-osservatore.
Come vedo, questo ha due vantaggi principali:
-
Il vantaggio meno importante: questa soluzione consente di avere meno relazioni soggetto-osservatore, e quindi (penso) crea meno complessità nel sistema. In questa semplice descrizione il numero di relazioni si riduce solo di uno, ma più osservatori e soggetti ci sono, più grande è il vantaggio.
-
Il vantaggio più importante: considera un'applicazione con due gruppi di oggetti, gruppo A e gruppo B. Tutti gli oggetti nel gruppo A devono osservare tutti gli oggetti nel gruppo B . Se decidiamo di aggiungere un oggetto al gruppo B, piuttosto che usare regolarmente Observer dovremmo aggiornare un sacco di codice per registrare tutti gli oggetti nel gruppo A come osservatori del nuovo oggetto. Con la soluzione "rete" (che sono sicuro ha un nome diverso), registriamo solo l'oggetto "medio" (oggetto O ) come osservatore del nuovo oggetto nel gruppo B, e tutto gli oggetti nel gruppo A verrebbero notificati quando il nuovo oggetto nel gruppo B cambia stato.
Le mie domande:
-
Questa soluzione è mai stata utilizzata in progetti professionali? hai mai incontrato questo in uso? O è solo un'idea interessante ma mai utilizzata in pratica?
-
Che cosa diresti sono gli svantaggi di questo modello?
-
Ha più vantaggi di cui non sono a conoscenza?
-
Questo ha un nome?