diff --git a/src/wetterstation/AktuelleBedingungenAnzeige.java b/src/wetterstation/AktuelleBedingungenAnzeige.java index c7af2382945ae649d7f8484c7b6766eea45ba5d2..c3c7eaa0cc2114133fb7410606ba26b9c95952e2 100644 --- a/src/wetterstation/AktuelleBedingungenAnzeige.java +++ b/src/wetterstation/AktuelleBedingungenAnzeige.java @@ -1,17 +1,21 @@ package wetterstation; - + public class AktuelleBedingungenAnzeige implements Beobachter { private float temperatur; private float feuchtigkeit; + WetterDaten wetterDaten; public AktuelleBedingungenAnzeige(WetterDaten wetterDaten) { + this.wetterDaten = wetterDaten; wetterDaten.registriereBeobachter(this); } - public void aktualisieren(float temp, float feucht, float druck) { - this.temperatur = temp; - this.feuchtigkeit = feucht; - anzeigen(); + public void aktualisieren(Subjekt s) { + if (s instanceof WetterDaten) { + this.temperatur = ((WetterDaten) s).getTemperatur(); + this.feuchtigkeit = ((WetterDaten) s).getFeuchtigkeit(); + anzeigen(); + } } public void anzeigen() { diff --git a/src/wetterstation/Beobachter.java b/src/wetterstation/Beobachter.java index fa733b6e065d777ebc49c7befb7a29d0e35d9a86..3b1dff498dc7a323747277decfd51e45798aa6be 100644 --- a/src/wetterstation/Beobachter.java +++ b/src/wetterstation/Beobachter.java @@ -1,5 +1,5 @@ package wetterstation; public interface Beobachter { - public void aktualisieren(float temp, float feucht, float druck); + public void aktualisieren(Subjekt s); } diff --git a/src/wetterstation/StatistikAnzeige.java b/src/wetterstation/StatistikAnzeige.java index 39d61a05e0ca034d9c61d62a603b629841662349..8510449cc49e493aaa945cb30cd4ae1cee5ef2d5 100644 --- a/src/wetterstation/StatistikAnzeige.java +++ b/src/wetterstation/StatistikAnzeige.java @@ -1,28 +1,34 @@ package wetterstation; + public class StatistikAnzeige implements Beobachter { private float maxTemp = 0.0f; private float minTemp = 200; private float tempSum= 0.0f; private int anzMesswerte; + WetterDaten wetterDaten; public StatistikAnzeige(WetterDaten wetterDaten) { + this.wetterDaten = wetterDaten; wetterDaten.registriereBeobachter(this); } - public void aktualisieren(float temp, float feucht, float druck) { - tempSum += temp; - anzMesswerte++; + public void aktualisieren(Subjekt s) { + if (s instanceof WetterDaten) { + float temp = ((WetterDaten) s).getTemperatur(); + tempSum += temp; + anzMesswerte++; - if (temp > maxTemp) { - maxTemp = temp; - } + if (temp > maxTemp) { + maxTemp = temp; + } - if (temp < minTemp) { - minTemp = temp; - } + if (temp < minTemp) { + minTemp = temp; + } - anzeigen(); + anzeigen(); + } } public void anzeigen() { diff --git a/src/wetterstation/Subjekt.java b/src/wetterstation/Subjekt.java new file mode 100644 index 0000000000000000000000000000000000000000..9762c389ff209a320cac7a0967812987c0a65c2a --- /dev/null +++ b/src/wetterstation/Subjekt.java @@ -0,0 +1,26 @@ +package wetterstation; + +import java.util.ArrayList; + +public abstract class Subjekt { + private ArrayList<Beobachter> beobachter = new ArrayList<Beobachter>(); + + public void registriereBeobachter(Beobachter b) { + beobachter.add(b); + } + + public void entferneBeobachter(Beobachter b) { + int i = beobachter.indexOf(b); + if (i >= 0) { + beobachter.remove(i); + } + } + + public void benachrichtigeBeobachter() { + for (int i = 0; i < beobachter.size(); i++) { + Beobachter observer = (Beobachter)beobachter.get(i); + observer.aktualisieren(this); + } + } + +} diff --git a/src/wetterstation/VorhersageAnzeige.java b/src/wetterstation/VorhersageAnzeige.java index 4727fc8d7c1cc0fb3ce0d7ed52220f72b4daca4e..ec52e1c0a977bb6660f6d6ca8e640d55b6c24f84 100644 --- a/src/wetterstation/VorhersageAnzeige.java +++ b/src/wetterstation/VorhersageAnzeige.java @@ -4,17 +4,19 @@ package wetterstation; public class VorhersageAnzeige implements Beobachter { private float aktuellerLuftdruck = 29.92f; private float letzterLuftdruck; - + WetterDaten wetterDaten; public VorhersageAnzeige(WetterDaten wetterDaten) { + this.wetterDaten = wetterDaten; wetterDaten.registriereBeobachter(this); } - public void aktualisieren(float temp, float feucht, float druck) { - letzterLuftdruck = aktuellerLuftdruck; - aktuellerLuftdruck = druck; - - anzeigen(); + public void aktualisieren(Subjekt s) { + if (s instanceof WetterDaten) { + letzterLuftdruck = aktuellerLuftdruck; + aktuellerLuftdruck = ((WetterDaten) s).getLuftdruck(); + anzeigen(); + } } public void anzeigen() { diff --git a/src/wetterstation/WetterDaten.java b/src/wetterstation/WetterDaten.java index fed03bb5fc1873dfe9ed29b4c516084a13fa32fe..2197603cb08aef5bd4303bb068964d8a8ef3aad2 100644 --- a/src/wetterstation/WetterDaten.java +++ b/src/wetterstation/WetterDaten.java @@ -1,29 +1,10 @@ package wetterstation; -import java.util.ArrayList; -public class WetterDaten { +public class WetterDaten extends Subjekt { private float temperatur; private float feuchtigkeit; private float luftdruck; - ArrayList<Beobachter> beobachter = new ArrayList<Beobachter>(); - - public void registriereBeobachter(Beobachter b) { - beobachter.add(b); - } - - public void entferneBeobachter(Beobachter b) { - int i = beobachter.indexOf(b); - if (i >= 0) { - beobachter.remove(i); - } - } - public void benachrichtigeBeobachter() { - for (int i = 0; i < beobachter.size(); i++) { - Beobachter observer = (Beobachter)beobachter.get(i); - observer.aktualisieren(temperatur, feuchtigkeit, luftdruck); - } - } public void messwerteGeaendert() { System.out.println(this.toString());