From d2df8881bd391bb964456db9940d618b9a8ef024 Mon Sep 17 00:00:00 2001
From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de>
Date: Sun, 11 Oct 2020 21:20:03 +0200
Subject: [PATCH] Add abstract factory for Ufos

---
 src/aliensimulator/AlienSimulator.java        | 15 ++++
 .../ufos/PredatorUfoFactory.java              | 26 +++++++
 src/aliensimulator/ufos/Sternenkreuzer.java   | 21 +++++
 src/aliensimulator/ufos/Transportschiff.java  | 20 +++++
 src/aliensimulator/ufos/Ufo.java              | 76 +++++++++++++++++++
 5 files changed, 158 insertions(+)
 create mode 100644 src/aliensimulator/ufos/PredatorUfoFactory.java
 create mode 100644 src/aliensimulator/ufos/Sternenkreuzer.java
 create mode 100644 src/aliensimulator/ufos/Transportschiff.java
 create mode 100644 src/aliensimulator/ufos/Ufo.java

diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java
index b355177..5a69d63 100644
--- a/src/aliensimulator/AlienSimulator.java
+++ b/src/aliensimulator/AlienSimulator.java
@@ -6,6 +6,10 @@ import aliensimulator.aliens.*;
 import aliensimulator.predators.Predator;
 import aliensimulator.predators.PredatorFactory;
 import aliensimulator.predators.Yautja;
+import aliensimulator.ufos.AlienUfoFactory;
+import aliensimulator.ufos.PredatorUfoFactory;
+import aliensimulator.ufos.Ufo;
+import aliensimulator.ufos.UfoFactory;
 import aliensimulator.verhalten.ErdeFreundlichBesuchen;
 import aliensimulator.verhalten.ErdeNeutralAdapter;
 
@@ -51,5 +55,16 @@ public class AlienSimulator {
 		yautja.fliegen();
 		yautja.erdeBesuchen();
 
+		UfoFactory alienUfoFactory = new AlienUfoFactory();
+		Ufo alienSternenkreuzer = alienUfoFactory.createUfo("sternenkreuzer");
+		System.out.println(alienSternenkreuzer);
+		Ufo alienTransportschiff = alienUfoFactory.createUfo("transportschiff");
+		System.out.println(alienTransportschiff);
+
+		UfoFactory predatorUfoFactory = new PredatorUfoFactory();
+		Ufo predatorSternenkreuzer = predatorUfoFactory.createUfo("sternenkreuzer");
+		System.out.println(predatorSternenkreuzer);
+		Ufo predatorTransportschiff = predatorUfoFactory.createUfo("transportschiff");
+		System.out.println(predatorTransportschiff);
 	}
 }
diff --git a/src/aliensimulator/ufos/PredatorUfoFactory.java b/src/aliensimulator/ufos/PredatorUfoFactory.java
new file mode 100644
index 0000000..ef8c125
--- /dev/null
+++ b/src/aliensimulator/ufos/PredatorUfoFactory.java
@@ -0,0 +1,26 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+import aliensimulator.ufos.komponenten.PredatorKomponentenFabrik;
+
+public class PredatorUfoFactory implements UfoFactory {
+    @Override
+    public Ufo createUfo(String type) {
+        Ufo ufo = null;
+        KomponentenFabrik komponentenFabrik = new PredatorKomponentenFabrik();
+
+        switch (type) {
+            case "sternenkreuzer" :
+                ufo = new Sternenkreuzer(komponentenFabrik);
+                ufo.setName("Predator Sternenkreuzer");
+                ufo.herstellen();
+                break;
+            case "transportschiff" :
+                ufo = new Transportschiff(komponentenFabrik);
+                ufo.setName("Predator Transportschiff");
+                ufo.herstellen();
+                break;
+        }
+        return ufo;
+    }
+}
diff --git a/src/aliensimulator/ufos/Sternenkreuzer.java b/src/aliensimulator/ufos/Sternenkreuzer.java
new file mode 100644
index 0000000..21c6877
--- /dev/null
+++ b/src/aliensimulator/ufos/Sternenkreuzer.java
@@ -0,0 +1,21 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+
+public class Sternenkreuzer extends Ufo {
+
+    public Sternenkreuzer(KomponentenFabrik komponentenFabrik) {
+        super();
+        setKomponentenFabrik(komponentenFabrik);
+    }
+
+    public void herstellen() {
+        setAntrieb(komponentenFabrik.createAntrieb());
+        setSchild(komponentenFabrik.createSchild());
+        setWaffe(komponentenFabrik.createWaffe());
+    }
+
+    public String toString() {
+        return "Sternenkreuzer\n" + super.toString();
+    }
+}
diff --git a/src/aliensimulator/ufos/Transportschiff.java b/src/aliensimulator/ufos/Transportschiff.java
new file mode 100644
index 0000000..6d23b53
--- /dev/null
+++ b/src/aliensimulator/ufos/Transportschiff.java
@@ -0,0 +1,20 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+
+public class Transportschiff extends Ufo {
+
+    public Transportschiff(KomponentenFabrik komponentenFabrik) {
+        super();
+        setKomponentenFabrik(komponentenFabrik);
+    }
+
+    public void herstellen() {
+        setAntrieb(komponentenFabrik.createAntrieb());
+        setSchild(komponentenFabrik.createSchild());
+    }
+
+    public String toString() {
+        return "Transportschiff\n" + super.toString();
+    }
+}
diff --git a/src/aliensimulator/ufos/Ufo.java b/src/aliensimulator/ufos/Ufo.java
new file mode 100644
index 0000000..6d2ef9d
--- /dev/null
+++ b/src/aliensimulator/ufos/Ufo.java
@@ -0,0 +1,76 @@
+package aliensimulator.ufos;
+
+import aliensimulator.ufos.komponenten.Antrieb;
+import aliensimulator.ufos.komponenten.KomponentenFabrik;
+import aliensimulator.ufos.komponenten.Schild;
+import aliensimulator.ufos.komponenten.Waffe;
+
+public abstract class Ufo {
+    KomponentenFabrik komponentenFabrik;
+    String name;
+    Antrieb antrieb;
+    Schild schild;
+    Waffe waffe;
+
+    public abstract void herstellen();
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Antrieb getAntrieb() {
+        return antrieb;
+    }
+
+    public void setAntrieb(Antrieb antrieb) {
+        this.antrieb = antrieb;
+    }
+
+    public Schild getSchild() {
+        return schild;
+    }
+
+    public void setSchild(Schild schild) {
+        this.schild = schild;
+    }
+
+    public Waffe getWaffe() {
+        return waffe;
+    }
+
+    public void setWaffe(Waffe waffe) {
+        this.waffe = waffe;
+    }
+
+    public KomponentenFabrik getKomponentenFabrik() {
+        return komponentenFabrik;
+    }
+
+    public void setKomponentenFabrik(KomponentenFabrik komponentenFabrik) {
+        this.komponentenFabrik = komponentenFabrik;
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer result = new StringBuffer();
+        result.append("Name: " + name + "\n");
+
+        if (antrieb != null) {
+            result.append(antrieb + "\n");
+        }
+
+        if (schild != null) {
+            result.append(schild + "\n");
+        }
+
+        if (waffe != null) {
+            result.append(waffe + "\n");
+        }
+
+        return result.toString();
+    }
+}
-- 
GitLab