From 2e862592013b23bc5f89f608cdc5f32543c306e3 Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Fri, 9 Oct 2020 22:01:05 +0200
Subject: [PATCH] Add predator and factories

---
 src/aliensimulator/AlienSimulator.java        | 21 ++++++++++++---
 src/aliensimulator/aliens/AlienFactory.java   | 18 +++++++++++++
 src/aliensimulator/predators/HishQuTen.java   | 17 ++++++++++++
 src/aliensimulator/predators/Predator.java    | 26 +++++++++++++++++++
 .../predators/PredatorFactory.java            | 13 ++++++++++
 src/aliensimulator/predators/Yautja.java      | 17 ++++++++++++
 6 files changed, 108 insertions(+), 4 deletions(-)
 create mode 100644 src/aliensimulator/aliens/AlienFactory.java
 create mode 100644 src/aliensimulator/predators/HishQuTen.java
 create mode 100644 src/aliensimulator/predators/Predator.java
 create mode 100644 src/aliensimulator/predators/PredatorFactory.java
 create mode 100644 src/aliensimulator/predators/Yautja.java

diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
index 49b5518..b355177 100644
--- a/src/aliensimulator/AlienSimulator.java
+++ b/src/aliensimulator/AlienSimulator.java
@@ -3,13 +3,18 @@ package aliensimulator;
 import aliens_3rdparty.AlienFromNY;
 import aliens_3rdparty.NeutralBesuchen;
 import aliensimulator.aliens.*;
+import aliensimulator.predators.Predator;
+import aliensimulator.predators.PredatorFactory;
+import aliensimulator.predators.Yautja;
 import aliensimulator.verhalten.ErdeFreundlichBesuchen;
 import aliensimulator.verhalten.ErdeNeutralAdapter;
 
 public class AlienSimulator {
 	
 	public static void main(String[] args) {
-		Alien alienMars = new AlienMars();
+		AlienFactory alienFactory = new AlienFactory();
+
+		Alien alienMars = alienFactory.createAlien("mars");
 		alienMars.darstellen();
 		alienMars.fliegen();
 
@@ -20,17 +25,17 @@ public class AlienSimulator {
 		alienMars.setErdeBesuchverhalten(new ErdeFreundlichBesuchen());
 		alienMars.erdeBesuchen();
 
-		Alien alienMond = new AlienMond();
+		Alien alienMond = alienFactory.createAlien("mond");
 		alienMond.darstellen();
 		alienMond.fliegen();
 		alienMond.erdeBesuchen();
 
-		Alien alienVenus = new AlienVenus();
+		Alien alienVenus = alienFactory.createAlien("venus");
 		alienVenus.darstellen();
 		alienVenus.fliegen();
 		alienVenus.erdeBesuchen();
 
-		Alien alienFromNY = new AlienAdapter(new AlienFromNY());
+		Alien alienFromNY = alienFactory.createAlien("ny");
 		alienFromNY.darstellen();
 		alienFromNY.fliegen();
 		System.out.println("Verhalten vom Alien von NY VOR der Änderung seines Verhaltens:");
@@ -38,5 +43,13 @@ public class AlienSimulator {
 		alienFromNY.setErdeBesuchverhalten(new ErdeNeutralAdapter(new NeutralBesuchen()));
 		System.out.println("Verhalten vom Alien von NY NACH der Änderung seines Verhaltens:");
 		alienFromNY.erdeBesuchen();
+
+		PredatorFactory predatorFactory = new PredatorFactory();
+
+		Predator yautja = predatorFactory.createPredator("yautja");
+		yautja.darstellen();
+		yautja.fliegen();
+		yautja.erdeBesuchen();
+
 	}
 }
diff --git a/src/aliensimulator/aliens/AlienFactory.java b/src/aliensimulator/aliens/AlienFactory.java
new file mode 100644
index 0000000..3dac451
--- /dev/null
+++ b/src/aliensimulator/aliens/AlienFactory.java
@@ -0,0 +1,18 @@
+package aliensimulator.aliens;
+
+import aliens_3rdparty.AlienFromNY;
+
+public class AlienFactory  {
+
+	public Alien createAlien(String type) {
+    	if (type.equals("mars")) {
+        		return new AlienMars();
+    	} else if (type.equals("mond")) {
+    	    	return new AlienMond();
+    	} else if (type.equals("venus")) {
+    	    	return new AlienVenus();
+    	} else if (type.equals("ny")) {
+        		return new AlienAdapter(new AlienFromNY());
+    	} else return null;
+}
+}
diff --git a/src/aliensimulator/predators/HishQuTen.java b/src/aliensimulator/predators/HishQuTen.java
new file mode 100644
index 0000000..c65210b
--- /dev/null
+++ b/src/aliensimulator/predators/HishQuTen.java
@@ -0,0 +1,17 @@
+package aliensimulator.predators;
+
+import aliens_3rdparty.NeutralBesuchen;
+import aliensimulator.verhalten.ErdeNeutralAdapter;
+
+public class HishQuTen extends Predator {
+
+	public HishQuTen() {
+		this.setErdeBesuchverhalten(new ErdeNeutralAdapter(new NeutralBesuchen()));
+	}
+
+	@Override
+	public void darstellen() {
+		System.out.println("Ich bin ein Hish-Qu-Ten.");
+	}
+
+}
diff --git a/src/aliensimulator/predators/Predator.java b/src/aliensimulator/predators/Predator.java
new file mode 100644
index 0000000..56bc7ed
--- /dev/null
+++ b/src/aliensimulator/predators/Predator.java
@@ -0,0 +1,26 @@
+package aliensimulator.predators;
+
+import aliensimulator.verhalten.ErdeBesuchverhalten;
+
+public abstract class Predator {
+    private ErdeBesuchverhalten erdeBesuchverhalten;
+
+    public 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/predators/PredatorFactory.java b/src/aliensimulator/predators/PredatorFactory.java
new file mode 100644
index 0000000..14ad9e3
--- /dev/null
+++ b/src/aliensimulator/predators/PredatorFactory.java
@@ -0,0 +1,13 @@
+package aliensimulator.predators;
+
+
+public class PredatorFactory {
+
+	public Predator createPredator(String type) {
+    	if (type.equals("yautja")) {
+    		return new Yautja();
+	} else if (type.equals("hishquten")) {
+	    	return new HishQuTen();
+	} else return null;
+	}
+}
diff --git a/src/aliensimulator/predators/Yautja.java b/src/aliensimulator/predators/Yautja.java
new file mode 100644
index 0000000..b7aee75
--- /dev/null
+++ b/src/aliensimulator/predators/Yautja.java
@@ -0,0 +1,17 @@
+package aliensimulator.predators;
+
+import aliens_3rdparty.ZerstoererischBesuchen;
+import aliensimulator.verhalten.ErdeZerstoererischAdapter;
+
+public class Yautja extends Predator {
+
+	public Yautja() {
+		this.setErdeBesuchverhalten(new ErdeZerstoererischAdapter());
+	}
+
+	@Override
+	public void darstellen() {
+		System.out.println("Ich bin ein Yautja.");
+	}
+
+}
-- 
GitLab