Skip to content
Snippets Groups Projects
Commit 5ed9c683 authored by Peter Hertkorn's avatar Peter Hertkorn
Browse files

Use javabeans library for observer pattern

parent ed72a389
No related branches found
No related tags found
No related merge requests found
package wetterstation; package wetterstation;
import java.util.Observable; import java.beans.PropertyChangeEvent;
import java.util.Observer; import java.beans.PropertyChangeListener;
public class AktuelleBedingungenAnzeige implements Observer { public class AktuelleBedingungenAnzeige implements PropertyChangeListener {
private float temperatur; private float temperatur;
private float feuchtigkeit; private float feuchtigkeit;
WetterDaten wetterDaten; WetterDaten wetterDaten;
public AktuelleBedingungenAnzeige(WetterDaten wetterDaten) { public AktuelleBedingungenAnzeige(WetterDaten wetterDaten) {
this.wetterDaten = wetterDaten; this.wetterDaten = wetterDaten;
wetterDaten.addPropertyListener(this); wetterDaten.addPropertyChangeListener(this);
} }
public void update(Observable o, Object arg) { public void propertyChange(PropertyChangeEvent e) {
if (o instanceof EigenschaftenSubjekt) { switch (e.getPropertyName()) {
WetterDaten daten = (WetterDaten) arg; case "Temperatur":
this.temperatur = daten.getTemperatur(); this.temperatur = (float)e.getNewValue();
this.feuchtigkeit = daten.getFeuchtigkeit(); System.out.println("Aktuelle Bedingungen: " + temperatur
anzeigen(); + " Grad C");
break;
case "Feuchtigkeit":
this.feuchtigkeit = (float)e.getNewValue();
System.out.println("Aktuelle Bedingungen: " + feuchtigkeit + "% Luftfeuchtigkeit");
break;
default:
break;
} }
} }
public void anzeigen() {
System.out.println("Aktuelle Bedingungen: " + temperatur
+ " Grad C und " + feuchtigkeit + "% Luftfeuchtigkeit");
}
} }
package wetterstation;
import java.util.Observable;
public class EigenschaftenSubjekt extends Observable {
public void firePropertyChange(WetterDaten wetterDaten) {
setChanged();
notifyObservers(wetterDaten);
}
}
package wetterstation; package wetterstation;
import java.util.Observable; import java.beans.PropertyChangeEvent;
import java.util.Observer; import java.beans.PropertyChangeListener;
public class StatistikAnzeige implements Observer { public class StatistikAnzeige implements PropertyChangeListener {
private float maxTemp = 0.0f; private float maxTemp = 0.0f;
private float minTemp = 200; private float minTemp = 200;
private float tempSum= 0.0f; private float tempSum= 0.0f;
...@@ -12,27 +12,32 @@ public class StatistikAnzeige implements Observer { ...@@ -12,27 +12,32 @@ public class StatistikAnzeige implements Observer {
public StatistikAnzeige(WetterDaten wetterDaten) { public StatistikAnzeige(WetterDaten wetterDaten) {
this.wetterDaten = wetterDaten; this.wetterDaten = wetterDaten;
wetterDaten.addPropertyListener(this); wetterDaten.addPropertyChangeListener(this);
} }
public void update(Observable o, Object arg) { public void propertyChange(PropertyChangeEvent e) {
if (o instanceof EigenschaftenSubjekt) { float temp;
WetterDaten daten = (WetterDaten) arg;
float temp = daten.getTemperatur(); switch (e.getPropertyName()) {
tempSum += temp; case "Temperatur":
anzMesswerte++; temp = (float)e.getNewValue();
tempSum += temp;
anzMesswerte++;
if (temp > maxTemp) { if (temp > maxTemp) {
maxTemp = temp; maxTemp = temp;
} }
if (temp < minTemp) { if (temp < minTemp) {
minTemp = temp; minTemp = temp;
} }
anzeigen(); anzeigen();
break;
default:
break;
} }
} }
public void anzeigen() { public void anzeigen() {
System.out.println("Mit/Max/Min Temperatur = " + (tempSum / anzMesswerte) System.out.println("Mit/Max/Min Temperatur = " + (tempSum / anzMesswerte)
......
package wetterstation; package wetterstation;
import java.util.Observable; import java.beans.PropertyChangeEvent;
import java.util.Observer; import java.beans.PropertyChangeListener;
public class VorhersageAnzeige implements Observer { public class VorhersageAnzeige implements PropertyChangeListener {
private float aktuellerLuftdruck = 29.92f; private float aktuellerLuftdruck = 29.92f;
private float letzterLuftdruck; private float letzterLuftdruck;
WetterDaten wetterDaten; WetterDaten wetterDaten;
public VorhersageAnzeige(WetterDaten wetterDaten) { public VorhersageAnzeige(WetterDaten wetterDaten) {
this.wetterDaten = wetterDaten; this.wetterDaten = wetterDaten;
wetterDaten.addPropertyListener(this); wetterDaten.addPropertyChangeListener(this);
} }
public void update(Observable o, Object arg) { public void propertyChange(PropertyChangeEvent e) {
if (o instanceof EigenschaftenSubjekt) { switch (e.getPropertyName()) {
WetterDaten daten = (WetterDaten) arg; case "Luftdruck":
letzterLuftdruck = aktuellerLuftdruck; letzterLuftdruck = aktuellerLuftdruck;
aktuellerLuftdruck = daten.getLuftdruck(); aktuellerLuftdruck = (float)e.getNewValue();
anzeigen(); anzeigen();
break;
default:
break;
} }
} }
public void anzeigen() { public void anzeigen() {
System.out.print("Vorhersage: "); System.out.print("Vorhersage: ");
......
package wetterstation; package wetterstation;
import java.util.Observer; import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class WetterDaten extends SensorDaten { public class WetterDaten extends SensorDaten {
private float temperatur; private float temperatur;
private float feuchtigkeit; private float feuchtigkeit;
private float luftdruck; private float luftdruck;
private EigenschaftenSubjekt subjekt; private float old_temperatur;
private float old_feuchtigkeit;
private float old_luftdruck;
private PropertyChangeSupport changes;
public WetterDaten() { public WetterDaten() {
subjekt = new EigenschaftenSubjekt(); changes = new PropertyChangeSupport(this);
} }
public void addPropertyListener(Observer o) { public void addPropertyChangeListener(PropertyChangeListener l) {
subjekt.addObserver(o); changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
changes.removePropertyChangeListener(l);
} }
public void messwerteGeaendert() { public void messwerteGeaendert() {
System.out.println(this.toString()); System.out.println(this.toString());
subjekt.firePropertyChange(this); changes.firePropertyChange("Temperatur", old_temperatur, temperatur);
changes.firePropertyChange("Feuchtigkeit", old_feuchtigkeit, feuchtigkeit);
changes.firePropertyChange("Luftdruck", old_luftdruck, luftdruck);
} }
public void setMesswerte(float temp, float feucht, float druck) { public void setMesswerte(float temp, float feucht, float druck) {
old_temperatur = this.temperatur;
old_feuchtigkeit = this.feuchtigkeit;
old_luftdruck = this.luftdruck;
this.temperatur = temp; this.temperatur = temp;
this.feuchtigkeit = feucht; this.feuchtigkeit = feucht;
this.luftdruck = druck; this.luftdruck = druck;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment