2011-12-01 39 views
5

Devo eseguire alcune attività su object1 quando si verifica un cambiamento di stato su object2. Stavo cercando di utilizzare pattern osservabili in Android, intendo utilizzare le classi Observer e Observable, quindi object1 implementa Observer e object2 estende Observable. Sfortunatamente, lo object2 si estende già da un'altra classe, quindi non posso definirlo come un'estensione di Observable.Alternativa al modello osservabile?

Esiste un'altra alternativa per utilizzare questo modello? Forse altre classi che mi permettono di eseguire questo comportamento?

Grazie.

risposta

8

semplicemente aggiungere object2 un campo di tipo Observable a cui si aggiungono gli osservatori e su cui notifyObservers() viene chiamato quando qualcosa cambia.

Questo è il significato di "composizione di favore sull'eredità".

+0

grazie! Questo è sufficiente per me. Anche la soluzione di kostja sembra buona, ma richiede uno sforzo supplementare. – forumercio

+0

Questa è una soluzione "pericolosa". Anche se funzionerà anche per me. Ma in aggiunta dovresti aver menzionato, FINALIZZARE la tua classe o almeno dichiarare tutte le proprietà rilevanti come private. Questo è l'unico modo per far funzionare il tuo osservabile, quando la tua classe è estesa da un altro ... – Sauer

6

Estendere la classe Observable incorporata è una scelta piuttosto brutta per implementare lo schema di osservatore in quanto disturba la gerarchia di classi, ma lo sapete già.

Un modo migliore sarebbe definire la propria interfaccia Observable e consentire alla classe di implementarla. Avrete anche bisogno di un'interfaccia Listener per le classi ascoltatore

I metodi si avrebbe bisogno nell'interfaccia Observable sono addListener(Listener listener) e removeListener(Listener listener)