diff --git a/lib/aliens_3rdparty.jar b/lib/aliens_3rdparty.jar
new file mode 100644
index 0000000000000000000000000000000000000000..6952e0b840cab170face2cb2e218047c4fa676f0
Binary files /dev/null and b/lib/aliens_3rdparty.jar differ
diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3551771bbc96780626a88f5a707e646d979047f
--- /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 0000000000000000000000000000000000000000..8f3385ad3f8c81ff3fb8c43eb8ccd7777aff6094
--- /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 0000000000000000000000000000000000000000..a3c429f9b71125c5f02ce04445b8f5b785e99e28
--- /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 0000000000000000000000000000000000000000..3dac451a8e3a52eeaf3d0c9fbe6bc0e9140f20f8
--- /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 0000000000000000000000000000000000000000..73c3090c698346732dc2e25918a4bec4e9ba11ba
--- /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 0000000000000000000000000000000000000000..60a5c816debf2a9f366102cdd506c547d2c04d98
--- /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 0000000000000000000000000000000000000000..176890729901b41f3ff935f8f42ab994a0b02359
--- /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 0000000000000000000000000000000000000000..c65210b4965d8d2091327b5e72c929a3738c364e
--- /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 0000000000000000000000000000000000000000..56bc7ed62aa9b06cf6acf75832f8514643781c7f
--- /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 0000000000000000000000000000000000000000..14ad9e3fe5367105689b17c33998c9d984611dd0
--- /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 0000000000000000000000000000000000000000..b7aee7571ffa2fde5d25a05cf5b8303ec0788283
--- /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 0000000000000000000000000000000000000000..8228a5babc5cdcd32858a4341521423989e2fcde
--- /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 0000000000000000000000000000000000000000..4458d615556151bd426ce9206af100976d6fc87b
--- /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 0000000000000000000000000000000000000000..a3f1ea436cfd0e049a2d2bfdb5c87626a0730f71
--- /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 0000000000000000000000000000000000000000..12922cb15097122a00e434d241ef921b10fe6ba6
--- /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 0000000000000000000000000000000000000000..1c4d9a2aaa8a9a2f9da83a54be8f52df1d1e6fbe
--- /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 1724e3d8249ad1c619d34f6e4c264d642a4e47d6..0000000000000000000000000000000000000000
--- a/src/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-Source Code für die Beispiele und Übungsaufgaben
\ No newline at end of file