From 7d49207944e7519dbf8f69ae2a02a98d0b5e30c2 Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Thu, 12 Nov 2020 18:46:00 +0100
Subject: [PATCH] Add observer interface

---
 .../AktuelleBedingungenAnzeige.java           |  2 +-
 src/wetterstation/Beobachter.java             |  5 +++++
 src/wetterstation/StatistikAnzeige.java       |  4 ++--
 src/wetterstation/VorhersageAnzeige.java      |  6 +++---
 src/wetterstation/WetterDaten.java            | 21 +++++++++++++------
 5 files changed, 26 insertions(+), 12 deletions(-)
 create mode 100644 src/wetterstation/Beobachter.java

diff --git a/src/wetterstation/AktuelleBedingungenAnzeige.java b/src/wetterstation/AktuelleBedingungenAnzeige.java
index 879d148..430fe98 100644
--- a/src/wetterstation/AktuelleBedingungenAnzeige.java
+++ b/src/wetterstation/AktuelleBedingungenAnzeige.java
@@ -1,6 +1,6 @@
 package wetterstation;
 	
-public class AktuelleBedingungenAnzeige {
+public class AktuelleBedingungenAnzeige implements Beobachter {
 	private float temperatur;
 	private float feuchtigkeit;
 	
diff --git a/src/wetterstation/Beobachter.java b/src/wetterstation/Beobachter.java
new file mode 100644
index 0000000..fa733b6
--- /dev/null
+++ b/src/wetterstation/Beobachter.java
@@ -0,0 +1,5 @@
+package wetterstation;
+
+public interface Beobachter {
+	public void aktualisieren(float temp, float feucht, float druck);
+}
diff --git a/src/wetterstation/StatistikAnzeige.java b/src/wetterstation/StatistikAnzeige.java
index 5ca9941..020cdee 100644
--- a/src/wetterstation/StatistikAnzeige.java
+++ b/src/wetterstation/StatistikAnzeige.java
@@ -1,12 +1,12 @@
 package wetterstation;
 
-public class StatistikAnzeige {
+public class StatistikAnzeige implements Beobachter {
 	private float maxTemp = 0.0f;
 	private float minTemp = 200;
 	private float tempSum= 0.0f;
 	private int anzMesswerte;
 
-	public void neueWerte(float temp, float feucht, float druck) {
+	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 ae53498..d6fd3b1 100644
--- a/src/wetterstation/VorhersageAnzeige.java
+++ b/src/wetterstation/VorhersageAnzeige.java
@@ -1,13 +1,13 @@
 package wetterstation;
 
 
-public class VorhersageAnzeige {
+public class VorhersageAnzeige implements Beobachter {
 	private float aktuellerLuftdruck = 29.92f;  
 	private float letzterLuftdruck;
 
 	
-	public void aktuelleWerte(float temp, float feucht, float druck) {
-        letzterLuftdruck = aktuellerLuftdruck;
+	public void aktualisieren(float temp, float feucht, float druck) {
+                letzterLuftdruck = aktuellerLuftdruck;
 		aktuellerLuftdruck = druck;
 
 		anzeigen();
diff --git a/src/wetterstation/WetterDaten.java b/src/wetterstation/WetterDaten.java
index 8ced0be..5ddeb3d 100644
--- a/src/wetterstation/WetterDaten.java
+++ b/src/wetterstation/WetterDaten.java
@@ -1,18 +1,27 @@
 package wetterstation;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+
 public class WetterDaten {
 	private float temperatur;
 	private float feuchtigkeit;
 	private float luftdruck;
-	AktuelleBedingungenAnzeige anzeige = new AktuelleBedingungenAnzeige();
-	StatistikAnzeige statistik = new StatistikAnzeige();
-	VorhersageAnzeige vorhersage = new VorhersageAnzeige();
+	ArrayList<Beobachter> beobachter = new ArrayList<Beobachter>(
+			Arrays.<Beobachter>asList(new AktuelleBedingungenAnzeige(),
+					    			  new StatistikAnzeige(),
+									  new VorhersageAnzeige()));
+	
+	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());
-		anzeige.aktualisieren(temperatur, feuchtigkeit, luftdruck);
-		statistik.neueWerte(temperatur, feuchtigkeit, luftdruck);
-		vorhersage.aktuelleWerte(temperatur, feuchtigkeit, luftdruck);
+		benachrichtigeBeobachter();
 	}
 	
 	public void setMesswerte(float temp, float feucht, float druck) {
-- 
GitLab