From 16ab464793ce4ba1a3497281e848fe8d70606c3f Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Thu, 12 Nov 2020 17:46:41 +0100
Subject: [PATCH] Aliensimulator using strategy pattern

---
 src/aliensimulator/Alien.java                 | 16 ++++++++++++-
 src/aliensimulator/AlienMars.java             | 10 +++++---
 src/aliensimulator/AlienMond.java             |  4 ++++
 src/aliensimulator/AlienSimulator.java        | 24 ++++++++++++++-----
 src/aliensimulator/AlienVenus.java            | 12 ++++++++++
 src/aliensimulator/ErdeBesuchverhalten.java   |  6 +++++
 src/aliensimulator/ErdeFeindlichBesuchen.java |  6 +++++
 .../ErdeFreundlichBesuchen.java               |  8 +++++++
 8 files changed, 76 insertions(+), 10 deletions(-)
 create mode 100644 src/aliensimulator/AlienVenus.java
 create mode 100644 src/aliensimulator/ErdeBesuchverhalten.java
 create mode 100644 src/aliensimulator/ErdeFeindlichBesuchen.java
 create mode 100644 src/aliensimulator/ErdeFreundlichBesuchen.java

diff --git a/src/aliensimulator/Alien.java b/src/aliensimulator/Alien.java
index e8ac21f..53e1fe0 100644
--- a/src/aliensimulator/Alien.java
+++ b/src/aliensimulator/Alien.java
@@ -2,9 +2,23 @@ package aliensimulator;
 
 public abstract class Alien {
 	
-	public abstract void darstellen();
+	protected ErdeBesuchverhalten erdeBesuchverhalten;
+
+	abstract void darstellen();
 
 	public void fliegen() {
 		System.out.println("Ich fliege durch den Weltraum.");
 	}
+	
+	public void erdeBesuchen(){
+		erdeBesuchverhalten.erdeBesuchen();
+	}
+
+	public ErdeBesuchverhalten getErdeBesuchverhalten() {
+		return erdeBesuchverhalten;
+	}
+
+	public void setErdeBesuchverhalten(ErdeBesuchverhalten erdeBesuchverhalten) {
+		this.erdeBesuchverhalten = erdeBesuchverhalten;
+	}
 }
diff --git a/src/aliensimulator/AlienMars.java b/src/aliensimulator/AlienMars.java
index 426cbac..037afd3 100644
--- a/src/aliensimulator/AlienMars.java
+++ b/src/aliensimulator/AlienMars.java
@@ -1,8 +1,12 @@
 package aliensimulator;
 
 public class AlienMars extends Alien {
+	
+	public AlienMars(){
+		erdeBesuchverhalten = new ErdeFeindlichBesuchen();
+	}
 
-    public void darstellen() {
-        System.out.println("Ich bin das Alien vom Mars.");
-    }
+	public void darstellen() {
+		System.out.println("Ich bin das Alien vom Mars.");
+	}
 }
diff --git a/src/aliensimulator/AlienMond.java b/src/aliensimulator/AlienMond.java
index 715c604..3268687 100644
--- a/src/aliensimulator/AlienMond.java
+++ b/src/aliensimulator/AlienMond.java
@@ -2,6 +2,10 @@ package aliensimulator;
 
 public class AlienMond extends Alien {
 	
+	public AlienMond(){
+		erdeBesuchverhalten = new ErdeFreundlichBesuchen();
+	}
+	
 	public void darstellen() {
 		System.out.println("Ich bin das Alien vom Mond.");
 	}
diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
index 4a9f6fd..68a94e5 100644
--- a/src/aliensimulator/AlienSimulator.java
+++ b/src/aliensimulator/AlienSimulator.java
@@ -3,13 +3,25 @@ package aliensimulator;
 public class AlienSimulator {
 	
 	public static void main(String[] args) {
+		Alien alienMars = new AlienMars();
+		alienMars.darstellen();
+		alienMars.fliegen();
 
-		Alien alien = new AlienMars();
-		alien.darstellen();
-		alien.fliegen();
+		// Änderung zur Laufzeit des Verhaltens des Aliens vom Mars
+		System.out.println("Verhalten vom Alien vom Mars VOR der Änderung seines Verhaltens:");
+		alienMars.erdeBesuchen();
+		System.out.println("Verhalten vom Alien vom Mars NACH der Änderung seines Verhaltens:");
+		alienMars.setErdeBesuchverhalten(new ErdeFreundlichBesuchen());
+		alienMars.erdeBesuchen();
 
-		alien = new AlienMond();
-		alien.darstellen();
-		alien.fliegen();
+		Alien alienMond = new AlienMond();
+		alienMond.darstellen();
+		alienMond.fliegen();
+		alienMond.erdeBesuchen();
+
+		Alien alienVenus = new AlienVenus();
+		alienVenus.darstellen();
+		alienVenus.fliegen();
+		alienVenus.erdeBesuchen();
 	}
 }
diff --git a/src/aliensimulator/AlienVenus.java b/src/aliensimulator/AlienVenus.java
new file mode 100644
index 0000000..55eafb9
--- /dev/null
+++ b/src/aliensimulator/AlienVenus.java
@@ -0,0 +1,12 @@
+package aliensimulator;
+
+public class AlienVenus extends Alien {
+	
+	public AlienVenus(){
+		erdeBesuchverhalten = new ErdeFreundlichBesuchen();
+	}
+
+	public void darstellen() {
+		System.out.println("Ich bin das Alien von der Venus.");
+	}
+}
diff --git a/src/aliensimulator/ErdeBesuchverhalten.java b/src/aliensimulator/ErdeBesuchverhalten.java
new file mode 100644
index 0000000..9100529
--- /dev/null
+++ b/src/aliensimulator/ErdeBesuchverhalten.java
@@ -0,0 +1,6 @@
+package aliensimulator;
+
+public interface ErdeBesuchverhalten {
+	
+	public void erdeBesuchen();
+}
diff --git a/src/aliensimulator/ErdeFeindlichBesuchen.java b/src/aliensimulator/ErdeFeindlichBesuchen.java
new file mode 100644
index 0000000..178b940
--- /dev/null
+++ b/src/aliensimulator/ErdeFeindlichBesuchen.java
@@ -0,0 +1,6 @@
+package aliensimulator;
+
+public class ErdeFeindlichBesuchen implements ErdeBesuchverhalten{
+
+	public void erdeBesuchen() { System.out.println("Ich besuche die Erde. Die Menschen schmecken gut."); }
+}
diff --git a/src/aliensimulator/ErdeFreundlichBesuchen.java b/src/aliensimulator/ErdeFreundlichBesuchen.java
new file mode 100644
index 0000000..7767065
--- /dev/null
+++ b/src/aliensimulator/ErdeFreundlichBesuchen.java
@@ -0,0 +1,8 @@
+package aliensimulator;
+
+public class ErdeFreundlichBesuchen implements ErdeBesuchverhalten {
+	
+	public void erdeBesuchen (){
+		System.out.println("Ich besuche die Erde. Die Menschen sind wundervoll.");
+	};
+}
-- 
GitLab