Hallo,
Ich beschäftige mich gerade mit dem Observer-Pattern und stelle mir folgende Frage. Wie entferne ich einen Beobachter am besten von der Liste des Subjekts.
Methode1: KonkreterBeobachter.removeObserver();
Methode 2: konkretesSubjekt.deleteObserver(KonkreterBeobachter);
//autohausMueller.deleteObserver(b1); //fuktioniert
b1.removeObserver(); //funktioniert auch
public void removeObserver(){
observable.deleteObserver(this);
}
public void addObserver(){
observable.addObserver(this);
}
Sollten solle Methoden in den Beobachtern implementiert werden ?
Wenn ja, warum gibt das Interface Observer eine Methode update() vor, nicht aber eine Methode remove(), add()
Viele Grüße,
Hellcoder
Ich beschäftige mich gerade mit dem Observer-Pattern und stelle mir folgende Frage. Wie entferne ich einen Beobachter am besten von der Liste des Subjekts.
Methode1: KonkreterBeobachter.removeObserver();
Methode 2: konkretesSubjekt.deleteObserver(KonkreterBeobachter);
Code:
public class testObservable {
public static void main(String[] args) {
Autohaus autohausMueller = new Autohaus();
Beobachter0 b0 = new Beobachter0(autohausMueller);
Beobachter1 b1 = new Beobachter1(autohausMueller);
autohausMueller.setAngebot("Fiat","Punto", 1000);
autohausMueller.setAngebot("Fiat","Cinquecento", 1300);
/*Entfernen des Beobachters b1*/
//autohausMueller.deleteObserver(b1); //fuktioniert
b1.removeObserver(); //funktioniert auch
autohausMueller.setAngebot("Fiat","Punto", 1000);
autohausMueller.setAngebot("Fiat","Cinquecento", 1300);
}
}
//autohausMueller.deleteObserver(b1); //fuktioniert
b1.removeObserver(); //funktioniert auch
Code:
public class Beobachter1 implements Observer,AnzeigeElement{
Observable observable;
private double preis;
private String modell;
public Beobachter1(Observable obs) {
this.observable = obs;
obs.addObserver(this);
}
@Override
public void update(Observable o, Object arg) {
if (o instanceof Autohaus){
Autohaus autohaus = (Autohaus) o;
this.modell = autohaus.getModell();
this.preis = autohaus.getPreis();
anzeigen();
}
}
@Override
public void anzeigen() {
System.out.println("Beobachter-1: " + modell + " preis: " + preis);
}
public void removeObserver(){
observable.deleteObserver(this);
}
public void addObserver(){
observable.addObserver(this);
}
}
public void removeObserver(){
observable.deleteObserver(this);
}
public void addObserver(){
observable.addObserver(this);
}
Sollten solle Methoden in den Beobachtern implementiert werden ?
Wenn ja, warum gibt das Interface Observer eine Methode update() vor, nicht aber eine Methode remove(), add()
Code:
public class Autohaus extends Observable{
private double preis;
private String marke;
private String modell;
public Autohaus() { }
public void angebotGeändert(){
setChanged(); //Anzeigen das sich zustand geändert hat. Immer nötig vor notifyObservers()
notifyObservers(); //Herausziehen-Modell für aktualisierung
}
/**Neues Angebot veröffentlichen*/
public void setAngebot(String marke, String modell,double preis){
this.preis = preis;
this.marke = marke;
this.modell = modell;
angebotGeändert();
}
public double getPreis(){
return this.preis;
}
public String getModell(){
return this.modell;
}
public String getMarke(){
return this.marke;
}
}
Viele Grüße,
Hellcoder