From f12cbd2d92818ec0b2000613b3c45d0965c09035 Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Thu, 12 Nov 2020 18:47:54 +0100 Subject: [PATCH] Add registration possibility for observers --- .../AktuelleBedingungenAnzeige.java | 4 ++++ src/wetterstation/StatistikAnzeige.java | 4 ++++ src/wetterstation/VorhersageAnzeige.java | 4 ++++ src/wetterstation/WetterDaten.java | 16 +++++++++++----- src/wetterstation/WetterStation.java | 5 +++++ 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/wetterstation/AktuelleBedingungenAnzeige.java b/src/wetterstation/AktuelleBedingungenAnzeige.java index 430fe98..c7af238 100644 --- a/src/wetterstation/AktuelleBedingungenAnzeige.java +++ b/src/wetterstation/AktuelleBedingungenAnzeige.java @@ -4,6 +4,10 @@ public class AktuelleBedingungenAnzeige implements Beobachter { private float temperatur; private float feuchtigkeit; + public AktuelleBedingungenAnzeige(WetterDaten wetterDaten) { + wetterDaten.registriereBeobachter(this); + } + public void aktualisieren(float temp, float feucht, float druck) { this.temperatur = temp; this.feuchtigkeit = feucht; diff --git a/src/wetterstation/StatistikAnzeige.java b/src/wetterstation/StatistikAnzeige.java index 020cdee..39d61a0 100644 --- a/src/wetterstation/StatistikAnzeige.java +++ b/src/wetterstation/StatistikAnzeige.java @@ -6,6 +6,10 @@ public class StatistikAnzeige implements Beobachter { private float tempSum= 0.0f; private int anzMesswerte; + public StatistikAnzeige(WetterDaten wetterDaten) { + wetterDaten.registriereBeobachter(this); + } + public void aktualisieren(float temp, float feucht, float druck) { tempSum += temp; anzMesswerte++; diff --git a/src/wetterstation/VorhersageAnzeige.java b/src/wetterstation/VorhersageAnzeige.java index d6fd3b1..4727fc8 100644 --- a/src/wetterstation/VorhersageAnzeige.java +++ b/src/wetterstation/VorhersageAnzeige.java @@ -6,6 +6,10 @@ public class VorhersageAnzeige implements Beobachter { private float letzterLuftdruck; + public VorhersageAnzeige(WetterDaten wetterDaten) { + wetterDaten.registriereBeobachter(this); + } + public void aktualisieren(float temp, float feucht, float druck) { letzterLuftdruck = aktuellerLuftdruck; aktuellerLuftdruck = druck; diff --git a/src/wetterstation/WetterDaten.java b/src/wetterstation/WetterDaten.java index 5ddeb3d..fed03bb 100644 --- a/src/wetterstation/WetterDaten.java +++ b/src/wetterstation/WetterDaten.java @@ -1,17 +1,23 @@ package wetterstation; import java.util.ArrayList; -import java.util.Arrays; public class WetterDaten { private float temperatur; private float feuchtigkeit; private float luftdruck; - ArrayList<Beobachter> beobachter = new ArrayList<Beobachter>( - Arrays.<Beobachter>asList(new AktuelleBedingungenAnzeige(), - new StatistikAnzeige(), - new VorhersageAnzeige())); + 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); diff --git a/src/wetterstation/WetterStation.java b/src/wetterstation/WetterStation.java index e0f38c9..d3d81b5 100644 --- a/src/wetterstation/WetterStation.java +++ b/src/wetterstation/WetterStation.java @@ -2,9 +2,14 @@ package wetterstation; public class WetterStation { + @SuppressWarnings("unused") public static void main(String[] args) { WetterDaten wetterDaten = new WetterDaten(); + AktuelleBedingungenAnzeige aktuelleAnzeige = new AktuelleBedingungenAnzeige(wetterDaten); + StatistikAnzeige statistikAnzeige = new StatistikAnzeige(wetterDaten); + VorhersageAnzeige vorhersageAnzeige = new VorhersageAnzeige(wetterDaten); + wetterDaten.setMesswerte(30, 65, 30.4f); wetterDaten.setMesswerte(32, 70, 29.2f); wetterDaten.setMesswerte(28, 90, 29.2f); -- GitLab