Ciao... sto cercando di applicare il pattern Observer ma non riesco a capire a fondo come fare 
Io ho un'applicazione che mi permette di creare delle tabelle. Ciascuna tabella che creo ha uno stato iniziale 'NonModificata'. Sempre dall'applicazione, successivamente, posso modificare questa tabella.
Prima di salvare le modifiche alla tabella, queste modifiche devono essere accettate.
Il mio intento è perciò quello di
- modificare la tabella (cercandola attraverso l'id)
- salvare le modifiche in maniera provvisoria (per il momento non è questo il mio problema!)
- cambiare lo stato della tabella in 'Modificata'
- far comparire al pannello un pulsante che permetta di visualizzare le modifiche
- una volta accettate o non accettate le modifiche ricambiare lo stato della tabella in 'NonModificata'.
Qualcuno può aiutarmi per favore??
Vi posto il codice che sto cercando di scrivere...
codice:
package patternObserver;
public class Stato {
public final static boolean Modificata = false;
public final static boolean NonModificata = true;
public boolean code;
public Object messaggio;
public Stato(boolean code, Object messaggio){
this.code = code;
this.messaggio = messaggio;
}
}
codice:
package patternObserver;
public abstract class Observer implements Runnable {
public abstract void update();
}
codice:
package patternObserver;
import patternObserver.Tabella;
import java.util.Observable;
import java.util.Observer;
public class ConcreteObserver_Tabella implements Observer {
private boolean statoObserver;
protected Tabella tab;
public void setObservable(Tabella observable) {
this.tab = observable;
}
public boolean getStatoObserver(){
return this.statoObserver;
}
@Override
public void update(Observable o, Object arg){
Stato messaggio = (Stato) arg;
if (messaggio.code == Stato.Modificata) {
System.out.println("La tabella è stata Modificata!!");
statoObserver = true;
}
else if (messaggio.code == Stato.NonModificata) {
System.out.println("La tabella non è stata Modificata!");
statoObserver = false;
}
}
}
codice:
package patternObserver;
import patternObserver.Tabella;
import java.util.ArrayList;
import java.util.List;
public abstract class Observable implements Runnable{
protected Tabella tabella;
private List<Observer> list = new ArrayList<Observer>();
public Observable() {
tabella = new Tabella();
creaObserver();
}
private void creaObserver() {
ConcreteObserver_Tabella observer = new ConcreteObserver_Tabella();
tabella.addObserver(observer);
}
public void addObserver(Observer observer) {
list.add( observer );
}
public void removeObserver(Observer observer) {
list.remove( observer );
}
public void notificaObservers() {
for(Observer observer: list) {
observer.update();
}
}
}
codice:
package patternObserver;
import patternObserver.Stato;
import java.util.Observable;
public class Tabella extends Observable {
private Integer idTabella = null;
private String nome;
private int numero;
public Tabella(){
changedState(new Stato(Stato.NonModificata, null));
this.idTabella = 0;
this.nome = null;
this.numero = 0;
}
public Tabella(Integer id, String nome, int num) {
changedState(new Stato(Stato.NonModificata, null));
this.idTabella = id;
this.nome = nome;
this.numero = num;
}
public void modificaStato() {
if(Stato.NonModificata) {
changedState(new Stato(Stato.Modificata, null));
} else
changedState(new Stato(Stato.NonModificata, null));
}
private void changedState(Stato msg) {
setChanged();
notifyObservers(msg);
}
public boolean getStato(){
if(Stato.Modificata)
return true;
return false;
}
}