From 499c99b1aa0ac3d5b21d3cb36ac9b2f9daf33035 Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Thu, 12 Nov 2020 18:49:47 +0100 Subject: [PATCH] Add common superclass for WetterDaten --- .../AktuelleBedingungenAnzeige.java | 14 ++++++---- src/wetterstation/Beobachter.java | 2 +- src/wetterstation/StatistikAnzeige.java | 26 ++++++++++++------- src/wetterstation/Subjekt.java | 26 +++++++++++++++++++ src/wetterstation/VorhersageAnzeige.java | 14 +++++----- src/wetterstation/WetterDaten.java | 21 +-------------- 6 files changed, 61 insertions(+), 42 deletions(-) create mode 100644 src/wetterstation/Subjekt.java diff --git a/src/wetterstation/AktuelleBedingungenAnzeige.java b/src/wetterstation/AktuelleBedingungenAnzeige.java index c7af238..c3c7eaa 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 fa733b6..3b1dff4 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 39d61a0..8510449 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 0000000..9762c38 --- /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 4727fc8..ec52e1c 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 fed03bb..2197603 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()); -- GitLab