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.