Per costruire un piccolo esempio mi ci vuole un po' di tempo, ma vedrò di postarlo.
A grandi linee, comunque, il modo di procedere è il seguente:
1) Crei una classe che estende Observable. Questa sarà la classe che contiene i dati: ogni volta che essa subisce un cambiamento, provvederà a notificare tutti i suoi osservatori.
2) Crei una classe che implementa l'interfaccia Observer: questa classe si registrerà come osservatore dell'altra classe e, ogni volta che l'altra viene modificata, sarà avvisata e riceverà una copia dell'oggetto modificato.
Un po' di codice a grandi linee:
codice:
public class MieiDati extends Observable implements Runnable {
private Vector v; // Uso un Vector per contenere tutti i record dei dati
...
public MieiDati() {
v = new Vector();
}
...
public void eseguiQuery(String qry) {
... // Eseguo la query sul DB
if ( dati_modificati ) { // Se i dati sono stati modificati
notifyObservers(); // Notifico il cambiamento a tutti gli osservatori
}
}
public Vector getVettore() { return v; }
}
public class Osservatore implements Observer {
public Osservatore() {
... // Inizializzazioni
}
public void update(Observable obj, Object arg) {
// Quando eseguo questo codice significa che sono avvenuti dei cambiamenti
// nella classe che contiene i dati. Ricevo una copia della classe modificata
// nel parametro obj
MieiDati md = (MieiDati) obj;
Vector nuoviDati = md.getVettore();
}
}
..
nella classe con il main:
MieiDati md = new MieiDati(); // Creo il contenitore dei dati
Osservatore oss = new Osservatore(); // Creo l'osservatore
md.addObserver( oss ); // Registro l'osservare sulla classe oggetto di osservazione
Tengo a farti notare che la classe che osserva può essere un qualunque oggetto, anche una tabella, una finestra, un thread... L'unica "limitazione" è imposta sull'oggetto osservato (nell'esempio di sopra ho citato il fatto che la tua classe implementa Runnable...) che deve per forza estendere Observable, ma l'osservatore è un'interfaccia, che quindi può essere quello che vuoi (nel mio esempio non è nient'altro che un oggetto semplice).
Ciao.