From 144cbe916ea9ce7871e6320b394a385050449de9 Mon Sep 17 00:00:00 2001 From: Peter Hertkorn <peter.hertkorn@reutlingen-university.de> Date: Sun, 11 Oct 2020 21:47:02 +0200 Subject: [PATCH] Change configurable factory to registry --- src/aliensimulator/AlienSimulator.java | 7 ++++++ src/aliensimulator/predators/HishQuTen.java | 8 ++++++ src/aliensimulator/predators/Predator.java | 2 ++ .../predators/PredatorFactory.java | 16 +++--------- .../predators/PredatorRegistry.java | 25 +++++++++++++++++++ src/aliensimulator/predators/Yautja.java | 8 ++++++ .../predators/predator.properties | 2 -- 7 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 src/aliensimulator/predators/PredatorRegistry.java delete mode 100644 src/aliensimulator/predators/predator.properties diff --git a/src/aliensimulator/AlienSimulator.java b/src/aliensimulator/AlienSimulator.java index 5a69d63..8814e44 100644 --- a/src/aliensimulator/AlienSimulator.java +++ b/src/aliensimulator/AlienSimulator.java @@ -16,6 +16,13 @@ import aliensimulator.verhalten.ErdeNeutralAdapter; public class AlienSimulator { public static void main(String[] args) { + try { + Class.forName("aliensimulator.predators.HishQuTen"); + Class.forName("aliensimulator.predators.Yautja"); + } catch (Exception e) { + e.printStackTrace(); + } + AlienFactory alienFactory = new AlienFactory(); Alien alienMars = alienFactory.createAlien("mars"); diff --git a/src/aliensimulator/predators/HishQuTen.java b/src/aliensimulator/predators/HishQuTen.java index c65210b..b971f0f 100644 --- a/src/aliensimulator/predators/HishQuTen.java +++ b/src/aliensimulator/predators/HishQuTen.java @@ -5,6 +5,10 @@ import aliensimulator.verhalten.ErdeNeutralAdapter; public class HishQuTen extends Predator { + static { + PredatorRegistry.register(new HishQuTen()); + } + public HishQuTen() { this.setErdeBesuchverhalten(new ErdeNeutralAdapter(new NeutralBesuchen())); } @@ -14,4 +18,8 @@ public class HishQuTen extends Predator { System.out.println("Ich bin ein Hish-Qu-Ten."); } + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("hishquten"); + } } diff --git a/src/aliensimulator/predators/Predator.java b/src/aliensimulator/predators/Predator.java index 56bc7ed..1ca5559 100644 --- a/src/aliensimulator/predators/Predator.java +++ b/src/aliensimulator/predators/Predator.java @@ -7,6 +7,8 @@ public abstract class Predator { public abstract void darstellen(); + public abstract Boolean canHandle(String type); + public void fliegen() { System.out.println("Ich fliege durch den Weltraum."); } diff --git a/src/aliensimulator/predators/PredatorFactory.java b/src/aliensimulator/predators/PredatorFactory.java index 6629222..e1c84e6 100644 --- a/src/aliensimulator/predators/PredatorFactory.java +++ b/src/aliensimulator/predators/PredatorFactory.java @@ -1,23 +1,15 @@ package aliensimulator.predators; - -import java.io.IOException; -import java.util.Properties; - public class PredatorFactory { public Predator createPredator(String type) { Predator predator = null; - Properties properties = new Properties(); - try { - properties.load(this.getClass().getResourceAsStream("predator.properties")); - String className = properties.getProperty(type); - Class<?> classOfPredator = Class.forName(className); - predator = (Predator) classOfPredator.newInstance(); - } catch (IOException | ClassNotFoundException | InstantiationException | IllegalAccessException e) { - e.printStackTrace(); + predator = PredatorRegistry.getPredatorHandler(type); + if (predator == null) { + System.out.println("Kein Handler gefunden"); } + return predator; } } diff --git a/src/aliensimulator/predators/PredatorRegistry.java b/src/aliensimulator/predators/PredatorRegistry.java new file mode 100644 index 0000000..e43f54a --- /dev/null +++ b/src/aliensimulator/predators/PredatorRegistry.java @@ -0,0 +1,25 @@ +package aliensimulator.predators; + +import java.util.ArrayList; +import java.util.List; +import java.util.ListIterator; + +public class PredatorRegistry { + static List<Predator> predatorHandlers = new ArrayList<Predator>(); + + static void register(Predator predator) { + predatorHandlers.add(predator); + } + + static Predator getPredatorHandler(String type) { + ListIterator<Predator> iter = predatorHandlers.listIterator(); + while (iter.hasNext()) { + Predator predator = iter.next(); + if (predator.canHandle(type)) { + return predator; + } + } + return null; + } + +} diff --git a/src/aliensimulator/predators/Yautja.java b/src/aliensimulator/predators/Yautja.java index b7aee75..d84de21 100644 --- a/src/aliensimulator/predators/Yautja.java +++ b/src/aliensimulator/predators/Yautja.java @@ -5,6 +5,10 @@ import aliensimulator.verhalten.ErdeZerstoererischAdapter; public class Yautja extends Predator { + static { + PredatorRegistry.register(new Yautja()); + } + public Yautja() { this.setErdeBesuchverhalten(new ErdeZerstoererischAdapter()); } @@ -14,4 +18,8 @@ public class Yautja extends Predator { System.out.println("Ich bin ein Yautja."); } + @Override + public Boolean canHandle(String type) { + return type.equalsIgnoreCase("yautja"); + } } diff --git a/src/aliensimulator/predators/predator.properties b/src/aliensimulator/predators/predator.properties deleted file mode 100644 index a1f5396..0000000 --- a/src/aliensimulator/predators/predator.properties +++ /dev/null @@ -1,2 +0,0 @@ -yautja=aliensimulator.predators.Yautja -hishquten=aliensimulator.predators.HishQuTen -- GitLab