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