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