From 1b1442d0f4a25743d279c88c9daab9dac5a32d6a Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Thu, 12 Nov 2020 21:45:00 +0100
Subject: [PATCH] Creatures with factories

---
 lib/aliens_3rdparty.jar                       | Bin 0 -> 1784 bytes
 src/aliensimulator/AlienSimulator.java        |  55 ++++++++++++++++++
 src/aliensimulator/aliens/Alien.java          |  26 +++++++++
 src/aliensimulator/aliens/AlienAdapter.java   |  24 ++++++++
 src/aliensimulator/aliens/AlienFactory.java   |  18 ++++++
 src/aliensimulator/aliens/AlienMars.java      |  14 +++++
 src/aliensimulator/aliens/AlienMond.java      |  14 +++++
 src/aliensimulator/aliens/AlienVenus.java     |  14 +++++
 src/aliensimulator/predators/HishQuTen.java   |  17 ++++++
 src/aliensimulator/predators/Predator.java    |  26 +++++++++
 .../predators/PredatorFactory.java            |  13 +++++
 src/aliensimulator/predators/Yautja.java      |  17 ++++++
 .../verhalten/ErdeBesuchverhalten.java        |   6 ++
 .../verhalten/ErdeFeindlichBesuchen.java      |   6 ++
 .../verhalten/ErdeFreundlichBesuchen.java     |   8 +++
 .../verhalten/ErdeNeutralAdapter.java         |  17 ++++++
 .../verhalten/ErdeZerstoererischAdapter.java  |  11 ++++
 src/readme.txt                                |   1 -
 18 files changed, 286 insertions(+), 1 deletion(-)
 create mode 100644 lib/aliens_3rdparty.jar
 create mode 100644 src/aliensimulator/AlienSimulator.java
 create mode 100644 src/aliensimulator/aliens/Alien.java
 create mode 100644 src/aliensimulator/aliens/AlienAdapter.java
 create mode 100644 src/aliensimulator/aliens/AlienFactory.java
 create mode 100644 src/aliensimulator/aliens/AlienMars.java
 create mode 100644 src/aliensimulator/aliens/AlienMond.java
 create mode 100644 src/aliensimulator/aliens/AlienVenus.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
 create mode 100644 src/aliensimulator/verhalten/ErdeBesuchverhalten.java
 create mode 100644 src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java
 create mode 100644 src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java
 create mode 100644 src/aliensimulator/verhalten/ErdeNeutralAdapter.java
 create mode 100644 src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java
 delete mode 100644 src/readme.txt

diff --git a/lib/aliens_3rdparty.jar b/lib/aliens_3rdparty.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6952e0b840cab170face2cb2e218047c4fa676f0
GIT binary patch
literal 1784
zcmWIWW@Zs#;Nak3Sdh2ahXDzQFt9NAx`sIFdiuHP`#So0y1532==r++JH^28+4sz8
zA8%c~i@e^tTIbH3-yCFc#rVO~M^Bj;0=(HdHq|q|lLi_k3B&<7El>r@Cgx<O<`u^q
z7o`*=7L`=$`=yqa6eZ?3r52YaXQbxoCFdj-7q<qS_B(7KAanVW$-;ma&E{M7GPXZq
z5NcQAQz-0W(CpAIYI2QL<tvgEn9s^S!QumBjYyJkKqUvKeA%AOyB|mH-)Fm@;fCY!
zLoCki$AeZ}Ji2Y)o@cl2R329{o^_l(X^JcJLY*m+Y3+a7stv=#?|E8?OiWzy##8mI
zopWaL=Q#^&X2fx^tKKm6S#&7i`%<CfkwRRx#|}prnEWw$^wILV(Rurmn<P&NI-mc4
z+-?5CQ-`CqI8&3wc)5%1Ygo&bl_yEf%9yy^M7cY6zsBh+)>ngO9>_R2xlZ)+6V(nj
zo8Y@HFY*pOUiW$zpV-En#Lk63k4NxoN2G38SF9DLvhQJi^&NrQtLN<xabEIqf8_D(
z_SU-GhtHH>G|DL13zsauzbGT{nV`|3lWWyO-gj?u-WW7N)hBRGt%-o2u+f>G_Hu5+
z19c92FV-D7G`+!j#_5oiAH9#rb*~Yf`}#d7sv@VX*dM_Nj4CF4QKg6_svJR4=T?-T
z>lX=$rrHU<{<j?j+V1x{%go-=vLxV^%9VnLj}zoqTyYi<S|!4H(o1`3*A(GfEv-6R
z_hxKXJas;cKjhUy`v&>e8KxclnydIfzdLiz?sHY%`+xtKKS<uz<Kp3+=P}XOkN?X}
z(d%h)vbXmv4!tG2L&GRU|EFoc(7afe`)$*cQY5_EjV3?qIC%5!Yh#i9tBfBWZVW#t
z<i(@C@r+CPEWXx%2irRnRvgVbGTH9>rDy#|7fGJxbk_dY-)gqi_gL1mg<Z3{uZGuE
zeeM*@WG&sJte@p|?b@S1QLA3;o;LHPq;AD6z2vzID>qGMOVeqpi7D{=vp_rTpu@}g
z3;TI%N<KC&+{X~$$n4AZ{nWHcJ;&Z0)6bF6ir?~9YtHACxMS*VU;T`hCnbc~8HH+b
zA2LY!P@T2PeUb88wpIH7Otv`WG%9SE@2q}H&2{>wjwuuM-u`#|DK5+PL37%tMa`*Q
zQ`^}tnJ?kVpD$OxFt7Ug-(z06Z`t0@XS7>c8?x+KddGK`Ox?B|y@m>wkK#^Edx~Gn
zfnqgOl$E<37^_uyV^s%BtVX346_@0v7Nr(t7AI$*=EL5AlU~e@0=2nGYR1QO-&ODN
z_%gv#qoSiCK%m93wS!&%(o7M*(@Wf|th)Y9l@qb~!B{sX!uZ{TgLYS5--_G2YWnr%
z=?u~lMHkdJC?&gE*+!es_0D|LTkoZ|l~dA4i+8cCS9PMxEyuuwCr)vm_S1gdvCoMQ
z$YAw~_R`+18?a*iJPwia$$XU>2i7i-S8aUgkZJXz^ma;Ls<m2U)`S)#yNPb8|J*lZ
zC{N|O()@pACfAPb^CiWVS6E5>UAn$>a@4CZgSNtJ)4oK!a+$C^^pU*e(%jQhlkTQT
zPG;i%ofxuP?eapYj}5m(CD$H0F=?Ht6fghf8Knlw2H)77S&L_g7wBycSX1d|`(xqZ
zq91!^-aVGBYAbwc-YKzpzpFR8UF%HUke0H(zrMzO8(+2E;)FNx)h<8v{Ht@kD>pPS
zZkzg@>6oKi<HGgN&d%W}cyAapx8lGR^Ty*dE>79`VfK-~N|7hD#qWcQ&!ao|+){wC
zX9bQuMkWykL<x;tw1P@#RDi3z4)8`b1v%G)ieUsu1Tu*#l+leuPI92)0s(k{-at1J
mqwqjC4mk`!=@bDTF=HBsFVzNkv$BD7vjCwJFjN<?f_MNC52|he

literal 0
HcmV?d00001

diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
new file mode 100644
index 0000000..b355177
--- /dev/null
+++ b/src/aliensimulator/AlienSimulator.java
@@ -0,0 +1,55 @@
+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) {
+		AlienFactory alienFactory = new AlienFactory();
+
+		Alien alienMars = alienFactory.createAlien("mars");
+		alienMars.darstellen();
+		alienMars.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 alienMond = alienFactory.createAlien("mond");
+		alienMond.darstellen();
+		alienMond.fliegen();
+		alienMond.erdeBesuchen();
+
+		Alien alienVenus = alienFactory.createAlien("venus");
+		alienVenus.darstellen();
+		alienVenus.fliegen();
+		alienVenus.erdeBesuchen();
+
+		Alien alienFromNY = alienFactory.createAlien("ny");
+		alienFromNY.darstellen();
+		alienFromNY.fliegen();
+		System.out.println("Verhalten vom Alien von NY VOR der Änderung seines Verhaltens:");
+		alienFromNY.erdeBesuchen();
+		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/Alien.java b/src/aliensimulator/aliens/Alien.java
new file mode 100644
index 0000000..8f3385a
--- /dev/null
+++ b/src/aliensimulator/aliens/Alien.java
@@ -0,0 +1,26 @@
+package aliensimulator.aliens;
+
+import aliensimulator.verhalten.ErdeBesuchverhalten;
+
+public abstract class Alien {
+	
+	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/aliens/AlienAdapter.java b/src/aliensimulator/aliens/AlienAdapter.java
new file mode 100644
index 0000000..a3c429f
--- /dev/null
+++ b/src/aliensimulator/aliens/AlienAdapter.java
@@ -0,0 +1,24 @@
+package aliensimulator.aliens;
+
+import aliens_3rdparty.AlienFromNY;
+import aliensimulator.verhalten.ErdeZerstoererischAdapter;
+
+public class AlienAdapter extends Alien {
+
+	private AlienFromNY alienFromNY;
+
+	public AlienAdapter(AlienFromNY alienNY) {
+		this.alienFromNY = alienNY;
+		this.setErdeBesuchverhalten(new ErdeZerstoererischAdapter());
+	}
+	
+	@Override
+	public void darstellen() {
+		alienFromNY.show();
+	}
+
+	@Override
+	public void fliegen() {
+		alienFromNY.fly();
+	}
+}
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/aliens/AlienMars.java b/src/aliensimulator/aliens/AlienMars.java
new file mode 100644
index 0000000..73c3090
--- /dev/null
+++ b/src/aliensimulator/aliens/AlienMars.java
@@ -0,0 +1,14 @@
+package aliensimulator.aliens;
+
+import aliensimulator.verhalten.ErdeFeindlichBesuchen;
+
+public class AlienMars extends Alien {
+	
+	public AlienMars(){
+		this.setErdeBesuchverhalten(new ErdeFeindlichBesuchen());
+	}
+
+	public void darstellen() {
+		System.out.println("Ich bin das Alien vom Mars.");
+	}
+}
diff --git a/src/aliensimulator/aliens/AlienMond.java b/src/aliensimulator/aliens/AlienMond.java
new file mode 100644
index 0000000..60a5c81
--- /dev/null
+++ b/src/aliensimulator/aliens/AlienMond.java
@@ -0,0 +1,14 @@
+package aliensimulator.aliens;
+
+import aliensimulator.verhalten.ErdeFreundlichBesuchen;
+
+public class AlienMond extends Alien {
+	
+	public AlienMond(){
+		this.setErdeBesuchverhalten(new ErdeFreundlichBesuchen());
+	}
+	
+	public void darstellen() {
+		System.out.println("Ich bin das Alien vom Mond.");
+	}
+}
diff --git a/src/aliensimulator/aliens/AlienVenus.java b/src/aliensimulator/aliens/AlienVenus.java
new file mode 100644
index 0000000..1768907
--- /dev/null
+++ b/src/aliensimulator/aliens/AlienVenus.java
@@ -0,0 +1,14 @@
+package aliensimulator.aliens;
+
+import aliensimulator.verhalten.ErdeFreundlichBesuchen;
+
+public class AlienVenus extends Alien {
+	
+	public AlienVenus(){
+		this.setErdeBesuchverhalten(new ErdeFreundlichBesuchen());
+	}
+
+	public void darstellen() {
+		System.out.println("Ich bin das Alien von der Venus.");
+	}
+}
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.");
+	}
+
+}
diff --git a/src/aliensimulator/verhalten/ErdeBesuchverhalten.java b/src/aliensimulator/verhalten/ErdeBesuchverhalten.java
new file mode 100644
index 0000000..8228a5b
--- /dev/null
+++ b/src/aliensimulator/verhalten/ErdeBesuchverhalten.java
@@ -0,0 +1,6 @@
+package aliensimulator.verhalten;
+
+public interface ErdeBesuchverhalten {
+	
+	public void erdeBesuchen();
+}
diff --git a/src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java b/src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java
new file mode 100644
index 0000000..4458d61
--- /dev/null
+++ b/src/aliensimulator/verhalten/ErdeFeindlichBesuchen.java
@@ -0,0 +1,6 @@
+package aliensimulator.verhalten;
+
+public class ErdeFeindlichBesuchen implements ErdeBesuchverhalten{
+
+	public void erdeBesuchen() { System.out.println("Ich besuche die Erde. Die Menschen schmecken gut."); }
+}
diff --git a/src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java b/src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java
new file mode 100644
index 0000000..a3f1ea4
--- /dev/null
+++ b/src/aliensimulator/verhalten/ErdeFreundlichBesuchen.java
@@ -0,0 +1,8 @@
+package aliensimulator.verhalten;
+
+public class ErdeFreundlichBesuchen implements ErdeBesuchverhalten {
+	
+	public void erdeBesuchen (){
+		System.out.println("Ich besuche die Erde. Die Menschen sind wundervoll.");
+	};
+}
diff --git a/src/aliensimulator/verhalten/ErdeNeutralAdapter.java b/src/aliensimulator/verhalten/ErdeNeutralAdapter.java
new file mode 100644
index 0000000..12922cb
--- /dev/null
+++ b/src/aliensimulator/verhalten/ErdeNeutralAdapter.java
@@ -0,0 +1,17 @@
+package aliensimulator.verhalten;
+
+import aliens_3rdparty.NeutralBesuchen;
+
+public class ErdeNeutralAdapter implements ErdeBesuchverhalten {
+
+	private NeutralBesuchen neutralBesuchen;
+	
+	public ErdeNeutralAdapter(NeutralBesuchen neutralBesuchen) {
+		this.neutralBesuchen = neutralBesuchen;
+	}
+	
+	@Override
+	public void erdeBesuchen() {
+		neutralBesuchen.abwarten();
+	}
+}
diff --git a/src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java b/src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java
new file mode 100644
index 0000000..1c4d9a2
--- /dev/null
+++ b/src/aliensimulator/verhalten/ErdeZerstoererischAdapter.java
@@ -0,0 +1,11 @@
+package aliensimulator.verhalten;
+
+import aliens_3rdparty.ZerstoererischBesuchen;
+
+public class ErdeZerstoererischAdapter extends ZerstoererischBesuchen implements ErdeBesuchverhalten {
+
+	@Override
+	public void erdeBesuchen() {
+		zerstoere();
+	}
+}
diff --git a/src/readme.txt b/src/readme.txt
deleted file mode 100644
index 1724e3d..0000000
--- a/src/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Source Code für die Beispiele und Übungsaufgaben
\ No newline at end of file
-- 
GitLab