Esiste un modello di progettazione per gli osservatori incatenati?

4

Diverse volte, mi sono trovato in una situazione in cui voglio aggiungere funzionalità a una relazione esistente Observer - Observable .

Ad esempio, supponiamo di avere una classe Observable chiamata PriceFeed , le cui istanze sono create da una varietà di PriceSources . Observers su questo viene notificato ogni volta che il sottostante PriceSource aggiorna PriceFeed con un nuovo prezzo.

Ora voglio aggiungere una funzione che consente di impostare una sovrascrittura (temporanea) su PriceFeed . Il PriceSource dovrebbe ancora aggiornare i prezzi su PriceFeed , ma fino a quando viene impostato l'override, ogni volta che un consumatore chiede PriceFeed per il suo valore corrente, dovrebbe ottenere l'override.

Il modo in cui l'ho fatto è stato introdurre un nuovo OverrideablePriceFeed che sia esso stesso un Observer e un Observable , e che decori il PriceFeed effettivo. La sua implementazione di .getPrice() è direttamente da Chain of Responsibility, ma che ne è della gestione degli eventi Observable? Quando un override è impostato o deselezionato, dovrebbe rilasciare il proprio evento a Observers , così come inoltrare eventi dal PriceFeed sottostante.

Penso che sia una specie di osservatore incatenato, ed ero curioso di sapere se esiste una descrizione più definitiva di un modello simile.

    
posta sharakan 06.12.2012 - 16:28
fonte

2 risposte

1

Si chiama Programmazione reattiva.

Guarda Rx.

Rx è tutto questo.

Tratta gli oggetti osservabili come enumerabili e quindi quello che stai facendo diventa semplice come chiamare la mappa sulla prima sequenza di eventi.

 events.map(new function(each) { return override != null ? override : each }

Rx è disponibile per molte lingue, troverai un video con un'introduzione di RxJS per Javascript qui, link

    
risposta data 07.12.2012 - 08:59
fonte
0

Sembra che quello che stai cercando sia un intercettore . Puoi fare in modo che il PriceFeed passi l'elenco di osservatori a un nuovo PriceFeedInterceptor che controlla PriceFeed e trasmette il prezzo normale o sostituito come appropriato. I tuoi osservatori non dovrebbero essere modificati, ma il PriceFeed dovrà conoscere l'intercettore ed essere pronto a delegare ad esso.

    
risposta data 07.12.2012 - 21:01
fonte

Leggi altre domande sui tag