S
schwaba
Gast
Hallo, ich habe eine Frage bezüglich des ObserverPatterns.
Ich habe folgende Klassen:
View:
Model:
Main-Test
Über setProperty rufe ich im Model das setChanged() und notifyOberservers auf. Das klappt auch wunderbar, nur wenn ich jetzt von einer anderen Klasse im Model, hier in der Klasse SubModel, etwas verändere und dies der View mitteilen möchte, wie kann ich das tun?
Das Model als Referenz allen andern Model-(Sub)-Klassen übergeben und über diese Referenz setProperty aurufen? Ist aber reichlich unschön. Da gibts doch bestimmt eine bessere Lösung oder?
Danke schon mal im Vorraus,
Schwaba
Ich habe folgende Klassen:
View:
Java:
public class View implements Observer{
private Model m;
public View(Model m){
this.m = m;
m.addObserver(this);
}
public void update(Observable arg0, Object arg1) {
if ((arg0 == m) && "property".equals(arg1)){
System.out.println(m.getProperty());
}
}
}
Java:
public class Model extends Observable {
private String property;
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
setChanged();
notifyObservers("property");
}
public Model() {
}
public void doit(){
setProperty("*Klick*"); //funktioniert
SubModel s = new SubModel(); //Event wird in dieser
s.doit(); //Klasse aufgerufen
}
}
Java:
public class SubModel {
public void doit(){
//Klick
setProperty("*Klick*"); //-->wie aufrufen? //ERROR
}
}
Java:
public class Test {
public static void main(final String[] args) {
Model m = new Model();
View v = new View(m);
m.doit(); //Als Test um setChanged() und notifyOberservers aufzurufen
}
Über setProperty rufe ich im Model das setChanged() und notifyOberservers auf. Das klappt auch wunderbar, nur wenn ich jetzt von einer anderen Klasse im Model, hier in der Klasse SubModel, etwas verändere und dies der View mitteilen möchte, wie kann ich das tun?
Das Model als Referenz allen andern Model-(Sub)-Klassen übergeben und über diese Referenz setProperty aurufen? Ist aber reichlich unschön. Da gibts doch bestimmt eine bessere Lösung oder?
Danke schon mal im Vorraus,
Schwaba