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