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