Quote Originariamente inviata da shodan Visualizza il messaggio
No, è la prima. Passando un puntatore a classe base perdi le informazioni su cosa sia la classe derivata, cosa che un puntatore a DerSubject richiede. Ricorda che un observer può osservare diversi subject (ragione per cui si passa un puntatore a subject in update() ), come un subject può avere diversi observer e non è possibile (in teoria) tenere traccia di tutte le possibili implementazioni.
Ok. Non capisco allora come poter ricavare i dati che mi servono dai subject per poter aggiornare l'observer tramite il metodo update.

Il caso reale che mi ha portato ad usare il design pattern observer è un oggetto che dipende da altri due, nel senso che se modifico uno dei due, o entrambi, l'oggetto 'indipendente' si deve aggiornare in automatico.

Il design pattern observer mi sembrava adatto allo scopo.

Avro' quindi due subject, che sono di due classi diverse, perchè rappresentano due cose diverse, in cui registrerò il mio observer (DerSubject1 e DerSubject2).

Nell'observer, dovrò quindi tenere traccia di entrambi i subject osservati, che non varieranno di numero.

Se nell'observer memorizzo i due subject come Subject, non riesco ad accedere 'direttamente' (bisogna fare cast) ai metodi implementati nella classe derivata, che sono quelli che permettono di ricavare i dati necessari all'aggiornamento dell'observer.

Se li memorizzo come DerSubject1 e DerSubject2 riesco invece ad accedere direttamente ai metodi necessari a ricavare i dati necessari all'observer.

Potrebbe sembrare esagerato usare il d.p. observer per una cosa del genere, in realtà gli stessi due subject potrebbero dover essere osservati, e quindi notificare eventuali modifiche, da un altro observer, 'concettualmente' diverso dal precedente (sarebbero quindi DerObserver1 e DerObserver2).

Inoltre, la modifica di uno dei due subject, richiederebbe l'aggiornamento di altri tipi di observer, che non ho ancora implementato, ma che lo dovranno essere a breve, ecco il perchè del tentativo di ricorrere al d.p. observer.