From 2d735c8ee566cb3bf44a910cfbd03317ec04fba1 Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Wed, 21 Oct 2020 20:25:04 +0200
Subject: [PATCH] Add Dependency Injection for KomponentenFabriken

---
 src/aliensimulator/ufos/AlienUfoFactory.java  | 35 +++++++++++++++++++
 src/aliensimulator/ufos/UfoFactory.java       |  7 ++++
 .../komponenten/AlienKomponentenFabrik.java   | 19 ++++++++++
 .../ufos/komponenten/Antrieb.java             |  5 +++
 .../ufos/komponenten/Hyperantrieb.java        |  8 +++++
 .../ufos/komponenten/KomponentenFabrik.java   |  9 +++++
 .../ufos/komponenten/Laserkanone.java         |  8 +++++
 .../ufos/komponenten/Metaphasenschild.java    |  8 +++++
 .../ufos/komponenten/Phaserkanone.java        |  8 +++++
 .../PredatorKomponentenFabrik.java            | 18 ++++++++++
 .../ufos/komponenten/Schild.java              |  5 +++
 .../ufos/komponenten/Verteidigungsschild.java |  8 +++++
 .../ufos/komponenten/Waffe.java               |  5 +++
 .../ufos/komponenten/Warpantrieb.java         |  8 +++++
 14 files changed, 151 insertions(+)
 create mode 100644 src/aliensimulator/ufos/AlienUfoFactory.java
 create mode 100644 src/aliensimulator/ufos/UfoFactory.java
 create mode 100644 src/aliensimulator/ufos/komponenten/AlienKomponentenFabrik.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Antrieb.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Hyperantrieb.java
 create mode 100644 src/aliensimulator/ufos/komponenten/KomponentenFabrik.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Laserkanone.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Metaphasenschild.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Phaserkanone.java
 create mode 100644 src/aliensimulator/ufos/komponenten/PredatorKomponentenFabrik.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Schild.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Verteidigungsschild.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Waffe.java
 create mode 100644 src/aliensimulator/ufos/komponenten/Warpantrieb.java

diff --git a/src/aliensimulator/ufos/AlienUfoFactory.java b/src/aliensimulator/ufos/AlienUfoFactory.java
new file mode 100644
index 0000000..6ed7917
--- /dev/null
+++ b/src/aliensimulator/ufos/AlienUfoFactory.java
@@ -0,0 +1,35 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.AlienKomponenten;
+import aliensimulator.ufos.komponenten.AlienKomponentenFabrik;
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+
+import javax.inject.Inject;
+
+public class AlienUfoFactory implements UfoFactory {
+
+    @Inject
+    private @AlienKomponenten KomponentenFabrik komponentenFabrik;
+
+    public AlienUfoFactory() {
+    }
+
+    @Override
+    public Ufo createUfo(String type) {
+        Ufo ufo = null;
+
+        switch (type) {
+            case "sternenkreuzer" :
+                ufo = new Sternenkreuzer(komponentenFabrik);
+                ufo.setName("Alien Sternenkreuzer");
+                ufo.herstellen();
+                break;
+            case "transportschiff" :
+                ufo = new Transportschiff(komponentenFabrik);
+                ufo.setName("Alien Transportschiff");
+                ufo.herstellen();
+                break;
+        }
+        return ufo;
+    }
+}
diff --git a/src/aliensimulator/ufos/UfoFactory.java b/src/aliensimulator/ufos/UfoFactory.java
new file mode 100644
index 0000000..9bf492b
--- /dev/null
+++ b/src/aliensimulator/ufos/UfoFactory.java
@@ -0,0 +1,7 @@
+package aliensimulator.ufos;
+
+public interface UfoFactory {
+
+    public Ufo createUfo(String type);
+
+}
diff --git a/src/aliensimulator/ufos/komponenten/AlienKomponentenFabrik.java b/src/aliensimulator/ufos/komponenten/AlienKomponentenFabrik.java
new file mode 100644
index 0000000..c17af0b
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/AlienKomponentenFabrik.java
@@ -0,0 +1,19 @@
+package aliensimulator.ufos.komponenten;
+
+public class AlienKomponentenFabrik implements KomponentenFabrik {
+    @Override
+    public Antrieb createAntrieb() {
+        return new Hyperantrieb();
+    }
+
+    @Override
+    public Schild createSchild() {
+        return new Verteidigungsschild();
+    }
+
+    @Override
+    public Waffe createWaffe() {
+        return new Phaserkanone();
+    }
+
+}
diff --git a/src/aliensimulator/ufos/komponenten/Antrieb.java b/src/aliensimulator/ufos/komponenten/Antrieb.java
new file mode 100644
index 0000000..d7f7fdc
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Antrieb.java
@@ -0,0 +1,5 @@
+package aliensimulator.ufos.komponenten;
+
+public interface Antrieb {
+    public String toString();
+}
diff --git a/src/aliensimulator/ufos/komponenten/Hyperantrieb.java b/src/aliensimulator/ufos/komponenten/Hyperantrieb.java
new file mode 100644
index 0000000..a2e8d0a
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Hyperantrieb.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Hyperantrieb implements Antrieb {
+    @Override
+    public String toString() {
+        return "Hyperantrieb";
+    }
+}
diff --git a/src/aliensimulator/ufos/komponenten/KomponentenFabrik.java b/src/aliensimulator/ufos/komponenten/KomponentenFabrik.java
new file mode 100644
index 0000000..2bbdb41
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/KomponentenFabrik.java
@@ -0,0 +1,9 @@
+package aliensimulator.ufos.komponenten;
+
+public interface KomponentenFabrik {
+
+    public Antrieb createAntrieb();
+    public Schild createSchild();
+    public Waffe createWaffe();
+}
+
diff --git a/src/aliensimulator/ufos/komponenten/Laserkanone.java b/src/aliensimulator/ufos/komponenten/Laserkanone.java
new file mode 100644
index 0000000..04def28
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Laserkanone.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Laserkanone implements Waffe {
+    @Override
+    public String toString() {
+        return "Laserkanone";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/Metaphasenschild.java b/src/aliensimulator/ufos/komponenten/Metaphasenschild.java
new file mode 100644
index 0000000..7139e88
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Metaphasenschild.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Metaphasenschild implements Schild {
+    @Override
+    public String toString() {
+        return "Metaphasenschild";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/Phaserkanone.java b/src/aliensimulator/ufos/komponenten/Phaserkanone.java
new file mode 100644
index 0000000..ff2b82c
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Phaserkanone.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Phaserkanone implements Waffe {
+    @Override
+    public String toString() {
+        return "Phaserkanone";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/PredatorKomponentenFabrik.java b/src/aliensimulator/ufos/komponenten/PredatorKomponentenFabrik.java
new file mode 100644
index 0000000..f09d47c
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/PredatorKomponentenFabrik.java
@@ -0,0 +1,18 @@
+package aliensimulator.ufos.komponenten;
+
+public class PredatorKomponentenFabrik implements KomponentenFabrik {
+    @Override
+    public Antrieb createAntrieb() {
+        return new Warpantrieb();
+    }
+
+    @Override
+    public Schild createSchild() {
+        return new Metaphasenschild();
+    }
+
+    @Override
+    public Waffe createWaffe() {
+        return new Laserkanone();
+    }
+}
diff --git a/src/aliensimulator/ufos/komponenten/Schild.java b/src/aliensimulator/ufos/komponenten/Schild.java
new file mode 100644
index 0000000..ccb0c1c
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Schild.java
@@ -0,0 +1,5 @@
+package aliensimulator.ufos.komponenten;
+
+public interface Schild {
+    public String toString();
+}
diff --git a/src/aliensimulator/ufos/komponenten/Verteidigungsschild.java b/src/aliensimulator/ufos/komponenten/Verteidigungsschild.java
new file mode 100644
index 0000000..8b29b17
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Verteidigungsschild.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Verteidigungsschild implements Schild {
+    @Override
+    public String toString() {
+        return "Verteidigungsschild";
+    }
+}
\ No newline at end of file
diff --git a/src/aliensimulator/ufos/komponenten/Waffe.java b/src/aliensimulator/ufos/komponenten/Waffe.java
new file mode 100644
index 0000000..02cb6a7
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Waffe.java
@@ -0,0 +1,5 @@
+package aliensimulator.ufos.komponenten;
+
+public interface Waffe {
+    public String toString();
+}
diff --git a/src/aliensimulator/ufos/komponenten/Warpantrieb.java b/src/aliensimulator/ufos/komponenten/Warpantrieb.java
new file mode 100644
index 0000000..c2faa88
--- /dev/null
+++ b/src/aliensimulator/ufos/komponenten/Warpantrieb.java
@@ -0,0 +1,8 @@
+package aliensimulator.ufos.komponenten;
+
+public class Warpantrieb implements Antrieb {
+    @Override
+    public String toString() {
+        return "Warpantrieb";
+    }
+}
-- 
GitLab