Hallo allerseits,
ich beschäftige mich zur Zeit mit dem Observer-Pattern und habe mir hierzu schon die FAQ aus diesem Forum bzw. Code-Beispiele und Erklärungen (u.a. von "Java ist auch eine Insel", usw.) aus dem Internet angesehen. Allerdings bin ich mit der Implementierung noch keinen Schritt weitergekommen. Als Framework nutze ich GWT, primär also die Webentwicklung und nichts mit Swing oder dergleichen (nur zur Information). Ich hoffe mal, dass ich hier im richtigen Unterforum gelandet, da das Problem auch nicht wirklich GWT-spezifisch ist.
Meistens ist es so, dass das Observer-Pattern gut erklärt wird, wenn man aber mal ein größeres Datenmodell einsetzt, dass nicht nur aus einer Klasse besteht, fangen schon die Probleme an. Da gibt es zum einem das Observer-Interface bzw. die Observable-Klasse als grundlegendes Pattern. Dann gibts es noch die Listener als erweiterte Observer-Pattern. Überall wird es verschieden in den Code implementiert, aber schlauer bin ich dadurch auch noch nicht geworden.
Also, worauf will ich hinaus. Ich zeige euch das am besten mal an meiner ApplicationModel-Klasse, siehe folgend:
Die Map enthält dabei ApplicationItem-Objekte. Sobald nun also z.B. ein ApplicationItem-Objekt (für weitere Infos siehe Klassendiagramm) in der Map editiert, gelöscht oder ein neues hinzukommt, möchte ich darüber informiert werden. Das Mittel der Wahl wären hier also die PropertyChange-Klassen und die dazugehörigen Methoden, so viel hab ich schon rausgefunden.
Aber wie genau implementiere ich das nun in der ApplicationModel-Klasse? Ich kann ja nicht in jeder Klasse ein eigenes Süppchen kochen. Der Sinn des MVC-Prinzips ist es ja grade, Änderungen am Modell nur in einer Klasse zu implementieren (hier die ApplicationModel-Klasse). Swing bietet hier ja die Möglichkeit Modelle an Komponenten zu binden. Ich arbeite aber mit dem GWT, wodurch ich da selbst Hand anlegen muss.
Am Ende soll das Hinzufügen eines PropertyChangeListeners in etwas so über die Bühne gehen:
Wie gesagt, es geht mir hier ums Prinzip, natürlich soll das dann später auch funktionieren.
Wäre toll, wenn mir jemand dabei helfen könnte!
ich beschäftige mich zur Zeit mit dem Observer-Pattern und habe mir hierzu schon die FAQ aus diesem Forum bzw. Code-Beispiele und Erklärungen (u.a. von "Java ist auch eine Insel", usw.) aus dem Internet angesehen. Allerdings bin ich mit der Implementierung noch keinen Schritt weitergekommen. Als Framework nutze ich GWT, primär also die Webentwicklung und nichts mit Swing oder dergleichen (nur zur Information). Ich hoffe mal, dass ich hier im richtigen Unterforum gelandet, da das Problem auch nicht wirklich GWT-spezifisch ist.
Meistens ist es so, dass das Observer-Pattern gut erklärt wird, wenn man aber mal ein größeres Datenmodell einsetzt, dass nicht nur aus einer Klasse besteht, fangen schon die Probleme an. Da gibt es zum einem das Observer-Interface bzw. die Observable-Klasse als grundlegendes Pattern. Dann gibts es noch die Listener als erweiterte Observer-Pattern. Überall wird es verschieden in den Code implementiert, aber schlauer bin ich dadurch auch noch nicht geworden.
Also, worauf will ich hinaus. Ich zeige euch das am besten mal an meiner ApplicationModel-Klasse, siehe folgend:
Java:
public class ApplicationModel {
private Map<String, ApplicationItem> itemHashMap;
public ApplicationModel() {
itemHashMap = new HashMap<String, ApplicationItem>();
}
public void setItemHashMap(Map<String, ApplicationItem> itemHashMap) {
this.itemHashMap = itemHashMap;
}
public Map<String, ApplicationItem> getItemHashMap() {
return itemHashMap;
}
}
Aber wie genau implementiere ich das nun in der ApplicationModel-Klasse? Ich kann ja nicht in jeder Klasse ein eigenes Süppchen kochen. Der Sinn des MVC-Prinzips ist es ja grade, Änderungen am Modell nur in einer Klasse zu implementieren (hier die ApplicationModel-Klasse). Swing bietet hier ja die Möglichkeit Modelle an Komponenten zu binden. Ich arbeite aber mit dem GWT, wodurch ich da selbst Hand anlegen muss.
Am Ende soll das Hinzufügen eines PropertyChangeListeners in etwas so über die Bühne gehen:
Java:
ApplicationModel model = new ApplicationModel();
mode.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void onPropertyChange(PropertyChangeEvent event) {
//hier kommt dann der Code hin
}
});
Wäre toll, wenn mir jemand dabei helfen könnte!