From 73bea2c55f403cccfbb09af56afea2bf085da5f6 Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Thu, 12 Nov 2020 18:54:06 +0100 Subject: [PATCH] Use java library for observer pattern --- .../AktuelleBedingungenAnzeige.java | 17 +++++++---- src/wetterstation/Beobachter.java | 5 ---- src/wetterstation/StatistikAnzeige.java | 30 +++++++++++-------- src/wetterstation/Subjekt.java | 26 ---------------- src/wetterstation/VorhersageAnzeige.java | 16 ++++++---- src/wetterstation/WetterDaten.java | 6 ++-- 6 files changed, 42 insertions(+), 58 deletions(-) delete mode 100644 src/wetterstation/Beobachter.java delete mode 100644 src/wetterstation/Subjekt.java diff --git a/src/wetterstation/AktuelleBedingungenAnzeige.java b/src/wetterstation/AktuelleBedingungenAnzeige.java index 03256ee..f73dc78 100644 --- a/src/wetterstation/AktuelleBedingungenAnzeige.java +++ b/src/wetterstation/AktuelleBedingungenAnzeige.java @@ -1,19 +1,24 @@ package wetterstation; -public class AktuelleBedingungenAnzeige implements Beobachter { +import java.util.Observable; +import java.util.Observer; + +public class AktuelleBedingungenAnzeige implements Observer { private float temperatur; private float feuchtigkeit; WetterDaten wetterDaten; public AktuelleBedingungenAnzeige(WetterDaten wetterDaten) { this.wetterDaten = wetterDaten; - wetterDaten.registriereBeobachter(this); + wetterDaten.addObserver(this); } - public void aktualisieren() { - this.temperatur = wetterDaten.getTemperatur(); - this.feuchtigkeit = wetterDaten.getFeuchtigkeit(); - anzeigen(); + public void update(Observable o, Object arg) { + if (o instanceof WetterDaten) { + this.temperatur = ((WetterDaten) o).getTemperatur(); + this.feuchtigkeit = ((WetterDaten) o).getFeuchtigkeit(); + anzeigen(); + } } public void anzeigen() { diff --git a/src/wetterstation/Beobachter.java b/src/wetterstation/Beobachter.java deleted file mode 100644 index 1a37fd3..0000000 --- a/src/wetterstation/Beobachter.java +++ /dev/null @@ -1,5 +0,0 @@ -package wetterstation; - -public interface Beobachter { - public void aktualisieren(); -} diff --git a/src/wetterstation/StatistikAnzeige.java b/src/wetterstation/StatistikAnzeige.java index 6c0bc81..2b9e66b 100644 --- a/src/wetterstation/StatistikAnzeige.java +++ b/src/wetterstation/StatistikAnzeige.java @@ -1,7 +1,9 @@ package wetterstation; +import java.util.Observable; +import java.util.Observer; -public class StatistikAnzeige implements Beobachter { +public class StatistikAnzeige implements Observer { private float maxTemp = 0.0f; private float minTemp = 200; private float tempSum= 0.0f; @@ -10,23 +12,25 @@ public class StatistikAnzeige implements Beobachter { public StatistikAnzeige(WetterDaten wetterDaten) { this.wetterDaten = wetterDaten; - wetterDaten.registriereBeobachter(this); + wetterDaten.addObserver(this); } - public void aktualisieren() { - float temp = wetterDaten.getTemperatur(); - tempSum += temp; - anzMesswerte++; + public void update(Observable o, Object arg) { + if (o instanceof WetterDaten) { + float temp = ((WetterDaten) o).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 deleted file mode 100644 index cb7e2cb..0000000 --- a/src/wetterstation/Subjekt.java +++ /dev/null @@ -1,26 +0,0 @@ -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(); - } - } - -} diff --git a/src/wetterstation/VorhersageAnzeige.java b/src/wetterstation/VorhersageAnzeige.java index 1faa923..f10a27f 100644 --- a/src/wetterstation/VorhersageAnzeige.java +++ b/src/wetterstation/VorhersageAnzeige.java @@ -1,20 +1,24 @@ package wetterstation; +import java.util.Observable; +import java.util.Observer; -public class VorhersageAnzeige implements Beobachter { +public class VorhersageAnzeige implements Observer { private float aktuellerLuftdruck = 29.92f; private float letzterLuftdruck; WetterDaten wetterDaten; public VorhersageAnzeige(WetterDaten wetterDaten) { this.wetterDaten = wetterDaten; - wetterDaten.registriereBeobachter(this); + wetterDaten.addObserver(this); } - public void aktualisieren() { - letzterLuftdruck = aktuellerLuftdruck; - aktuellerLuftdruck = wetterDaten.getLuftdruck(); - anzeigen(); + public void update(Observable o, Object arg) { + if (o instanceof WetterDaten) { + letzterLuftdruck = aktuellerLuftdruck; + aktuellerLuftdruck = ((WetterDaten) o).getLuftdruck(); + anzeigen(); + } } public void anzeigen() { diff --git a/src/wetterstation/WetterDaten.java b/src/wetterstation/WetterDaten.java index 2197603..e82cd9a 100644 --- a/src/wetterstation/WetterDaten.java +++ b/src/wetterstation/WetterDaten.java @@ -1,14 +1,16 @@ package wetterstation; +import java.util.Observable; -public class WetterDaten extends Subjekt { +public class WetterDaten extends Observable { private float temperatur; private float feuchtigkeit; private float luftdruck; public void messwerteGeaendert() { System.out.println(this.toString()); - benachrichtigeBeobachter(); + setChanged(); + notifyObservers(); } public void setMesswerte(float temp, float feucht, float druck) { -- GitLab