In una base di codice C ++ su cui sto lavorando, hanno un sacco di esempi del pattern di osservatore, ma è un po 'diverso dal modello classico. Nel classico, l'Observer è un'interfaccia specifica con uno o più metodi specifici chiamati quando l'Observable cambia o ha nuovi dati.
Observable Observer
register( Observer* ) update( data1, data2 ... )
Nel nostro codice base, usiamo una classe template che prende il numero e il tipo di argomenti per il metodo update () come parametri e consente di specificare qualsiasi puntatore-metodo come destinatario dei dati.
Observable
register( Functor<data1, data2> )
Questo è un miglioramento rispetto al modello originale? Ecco cosa penso siano i pro di ciascun approccio:
Classico:
- chiarezza - l'interfaccia indica quali classi sono destinatari di dati osservabili
- less code - la piastra della caldaia e la brutta sintassi del template per creare il functor sono piuttosto onerosi
Variante:
- flessibilità: posso far sì che qualsiasi oggetto nel mio sistema riceva l'aggiornamento (se ha la firma del metodo corretta) senza dover cambiare l'oggetto originale
Come altra opzione, ho tutto sbagliato che questo è lo schema di Osservatore in pratica?